【发布时间】:2018-11-08 08:59:39
【问题描述】:
我正在尝试使用元类自动注册子类,
但是下面的代码在 class Dep_A 上抛出了错误
super(Dep_A,self).__init__().
*NameError: global name 'Dep_A' is not defined*
尝试了 MetaClass 中的注释行,但错误相同。 我知道这在不使用元类时有效,所以我如何初始化父类的 init 方法
registry = {}
def register(cls):
print cls.__name__
registry[cls.__name__] = cls()
return cls
class MetaClass(type):
def __new__(mcs, clsname, bases, attrs):
# newclass = super(MetaClass, mcs).__new__(mcs, clsname, bases, attrs)
newclass = type.__new__(mcs,clsname, bases, attrs)
register(newclass)
return newclass
class Department(object):
__metaclass__ = MetaClass
def __init__(self):
self.tasks = dict()
class Dep_A(Department):
def __init__(self):
super(Dep_A,self).__init__()
...
【问题讨论】:
-
所以你在
registry字典中存储了一个类的instance? -
是的@Martijn,或者我应该存储类以便稍后实例化。
-
顺便说一句,您将在 2018 年为一个使用 Python 2 的高级 Python 功能的新项目奠定基础,该项目将在不到 2 年内达到 EOL。
-
DCC 软件约束,AutoDesk Maya 在 python27 上
标签: python python-2.x super metaclass