【发布时间】:2011-08-21 21:35:18
【问题描述】:
我正在从这里的信息中复制:Metaclass not being called in subclasses
我的问题是我无法使用此类注册表创建对象的实例。如果我使用“常规”构造方法,那么它似乎可以正确实例化对象;但是当我尝试使用与注册表关联的类对象时,我收到一个错误,即我传递的参数数量不正确。 (似乎在调用元类 new 而不是我的构造函数...??)
我不清楚它为什么会失败,因为我认为我应该能够使用“可调用”语法从类对象创建一个实例。
似乎我将元类放入注册表而不是类本身?但我没有看到在 new 调用中访问类本身的简单方法。
这是我的代码示例,它无法实例化变量“d”:
registry = [] # 子类列表 类插件元类(类型): def __new__(cls, name, bases, attrs): 打印(分类) 打印(名称) registry.append((名称,cls)) return super(PluginMetaclass, cls).__new__(cls, name, bases, attrs) 类插件(metaclass=PluginMetaclass): def __init__(自我,东西): self.stuff = 东西 # 在你的插件模块中 类 SpamPlugin(插件): def __init__(自我,东西): self.stuff = 东西 BaconPlugin 类(插件): def __init__(自我,东西): self.stuff = 东西 c = SpamPlugin(0) b = 培根插件(0) mycls = 注册表[1][1] d = mycls(0)感谢您的帮助。
【问题讨论】:
标签: python factory-pattern metaclass