Python __new__ - 如何cls与__new__所在的类不同

时间:2016-07-29 14:13:32

标签: python

Documentation for object.__new__(cls[, ...]) says:

  

调用以创建类cls的新实例。 __ new __是静态的   需要的方法(特殊的,所以你不需要声明它)   请求实例作为其第一个参数的类。

所以,如果你有var = MyClass()

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

赢了cls总是等于MyClass

1 个答案:

答案 0 :(得分: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中,所有类都是“新风格”。