Там есть класс (не создана мной, из 3-сторонней библиотеки), которая не имеет __init__
объявленную (кроме object
«s __init__
), и это его __new__
:Python подклассов класса с обычаем __new__
def __new__(cls, uid):
self = super().__new__(cls, uid)
self._info = get_info_from_uid(uid)
return self
Не понимаю, почему они просто не использовали __init__
здесь, но они этого не сделали.
Теперь я хотел бы подклассифицировать это и дать ему дополнительный атрибут; прежде чем я проверил исходный код класса (только документация), я думал, что это просто использует __init__
как другие, так вот что я сделал:
class MyClass(TheirClass):
def __init__(self, uid, my_stuff=()):
super().__init__(uid)
self.my_stuff = my_stuff
Видимо, поднял TypeError от object.__init__()
не принимающих parameteres. Как я должен подклассифицировать такой класс с помощью __new__
? Я просто переопределяю метод __new__
?
В '__new__' метод, как и опубликовано, не будет работать, если класс не наследует от чего-то другого, кроме самого объекта; 'object .__ new__' не принимает аргументов в этом случае. Я ожидаю, что он прочитает 'self = super() .__ new __ (cls)'. –
Также, конечно, они бы использовали 'get_info_from_uid (uid)' (а не 'self.uid')? –
@MartijnPieters Да, он наследует и от нескольких других классов, но у них также нет '__init__'. И жаль насчет 'self.uid', это была моя опечатка при попытке создать свой собственный класс, забыли его там. –