2016-07-29 5 views
1

Documentation for object.__new__(cls[, ...]) says:Python __new__ - как ЦБС отличаться от класса, который __new__ в

Called, чтобы создать новый экземпляр класса cls. __ new __ - статический метод (специально обжатый, поэтому вам не нужно объявлять его как таковой), который принимает класс, для которого экземпляр был запрошен как его первый аргумент.

Так что если у вас есть var = MyClass() и

class MyClass: 
    def __new__(cls): 
     ... 

Не cls ВСЕГДА быть равна MyClass?

+2

Подсказка: что произойдет, если вы создадите подкласс, который наследует 'MyClass'? –

+1

Что делать, если '__new__' был унаследован производным классом? – cdarke

ответ

2

Попробуйте это:

class MyClass: 
    def __new__(cls): 
     print(cls) 

class Yac(MyClass): 
    pass 

x = Yac() 
print(x) 

Получаем:

<class '__main__.Yac'> 
None 

Кстати, это хорошо в Python 3, но не будет работать в Python 2. В Python 2 __new__ поддерживается только в классах «нового стиля»:

class MyClass(object): 

В Python 3 все классы являются «новыми».

Смежные вопросы