Форум сайта python.su
Я пытаюсь реализовать ecs в Python. Когда я создаю объект конкретного компонента через класс компонента ниже, то получаю ошибку “TypeError: object.__new__() takes exactly one argument (the type to instantiate)”. Я гуглил по поводу такой ошибки, но не помогло. Как работает этот object.__new__()?
Что я только не делал чтобы это заработало, прописывал *args **kwargs разными способами, даже прописывал super().__init__() в __init__() этого класса хоть я знал что ошибка точно не здесь так как до инициализации даже не доходит.
Я писал этот код по туториалу. В нем использовался python 2 и там все работало а на python 3 нет. Хотя я переписал под 3 версию, но он все равно не работает. Я понимаю что проблема может быть в методе super(), но я не знаю зачем нужен второй аргумент в этом методе, что он делает. Я даже в документации искал инфу про него но ее там просто нет (ну или по крайней мере инфа в очень не очевидном месте).
И так… почему происходит эта ошибка?
class Component: defaults = dict() Catalog = dict() ComponentTypes = dict() def __new__(cls, entity=None): class_name = cls.__name__ if class_name not in Component.ComponentTypes: Component.ComponentTypes[class_name] = cls cls.Catalog = dict() if entity not in cls.Catalog: component = super(Component, cls).__new__(cls, entity=entity) else: component = cls.Catalog(entity) return component def __init__(self, entity=None): self.entity = entity for prop, val in self.default.items(): setattr(self, prop, properties.get(prop, val))
Отредактировано Magister6239 (Фев. 21, 2022 08:00:53)
Офлайн