Я использую информацию здесь: Метакласс не вызывается в подклассах
Моя проблема в том, что я не могу создать экземпляр объекта, используя этот реестр классов. Если я использую «обычные» методы построения, то создается впечатление, что объекты создаются правильно; но когда я пытаюсь использовать объект класса, связанный с реестром, я получаю сообщение об ошибке, заключающееся в том, что я передаю неправильное количество аргументов. (Кажется, это вызов метакласса new , а не моего конструктора ... ??)
Я не понимаю, почему он не работает, потому что я думал, что смогу создать экземпляр из класса объект с использованием "вызываемого" синтаксиса.
Кажется, я помещаю в реестр метакласс, а не сам класс? Но я не вижу простого способа получить доступ к самому классу в вызове new .
Вот мой пример кода, в котором не удалось создать экземпляр переменной 'd':
registry = [] # list of subclasses class PluginMetaclass(type): def __new__(cls, name, bases, attrs): print(cls) print(name) registry.append((name, cls)) return super(PluginMetaclass, cls).__new__(cls, name, bases, attrs) class Plugin(metaclass=PluginMetaclass): def __init__(self, stuff): self.stuff = stuff # in your plugin modules class SpamPlugin(Plugin): def __init__(self, stuff): self.stuff = stuff class BaconPlugin(Plugin): def __init__(self, stuff): self.stuff = stuff c = SpamPlugin(0) b = BaconPlugin(0) mycls = registry[1][1] d = mycls(0)
Спасибо за любую помощь.