2016-07-29 48 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中,所有类都是“新风格”。

相关问题