【发布时间】:2018-09-02 14:09:17
【问题描述】:
在以下示例中,新创建的子类最终成为元类__module__,而不是父类的模块。我只在使用 ABCMeta 时看到过这种情况,所以它可能是该模块特有的,有人知道会发生什么吗?
In [1]: from abc import ABCMeta
In [2]: class test(metaclass=ABCMeta):
...: pass
...:
In [3]: newclass = type('newclass', (test,), {})
In [4]: newclass.__module__
Out[4]: 'abc'
当我以更标准的方式定义子类时会发生我想要的行为:
In [5]: class subtest(test):
...: pass
...:
In [6]: subtest.__module__
Out[6]: '__main__'
有人能解释一下为什么会出现这种情况,以及如何使用type 创建一个继承了正确__module__ 属性的新子类(例如__module__=='__main__')吗?
【问题讨论】:
-
这看起来可能是一个实际的错误。很有趣。
标签: python python-3.x metaprogramming metaclass