2016-07-29 34 views
1

Documentation for object.__new__(cls[, ...]) says:Python的__new__ - 如何CLS比__new__是

調用,以創建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中,所有類都是「新風格」。

相關問題