Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 20, 2022 02:28:25

Magister6239
Зарегистрирован: 2019-08-13
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

object.__new__() takes exactly one argument

Я пытаюсь реализовать 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version