2016-07-29 10 views
1

Documentation for object.__new__(cls[, ...]) says:Python __new__ - wie kann cls als Klasse unterscheiden, die in __new__ ist

Genannt cls eine neue Instanz der Klasse zu erstellen. __ new __ ist eine statische -Methode (mit Sonderzeichen, so dass Sie sie nicht als solche deklarieren müssen), die die Klasse annimmt, von der eine Instanz als erstes Argument angefordert wurde.

Also, wenn Sie var = MyClass() und

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

Wird nicht cls IMMER MyClass gleich sein?

+2

Hinweis: Was passiert, wenn Sie eine Unterklasse erstellen, die 'MyClass' erbt? –

+1

Was passiert, wenn '__new__' von einer abgeleiteten Klasse geerbt wurde? – cdarke

Antwort

2

Try this:

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

class Yac(MyClass): 
    pass 

x = Yac() 
print(x) 

Wir erhalten:

<class '__main__.Yac'> 
None 

By the way, ist dies in Ordnung in Python 3, wird aber in Python 2. In Python nicht funktioniert 2 __new__ nur unterstützt in Klassen im "neuen Stil":

class MyClass(object): 

In Python 3 sind alle Klassen "new-style".

Verwandte Themen