Beim Lernen über Python-Datenmodell, spiele ich mit dem Erstellen von Objekten aus vorhandenen Objekten mit der Methode __new__
. Hier sind einige Beispiele, die neuen Objekte verschiedenen Typen erstellen:Python-Objekte aus vorhandenen Objekten mit __new__
x = 2; print type(x).__new__(x.__class__)
x = {}; print type(x).__new__(x.__class__)
x = [1,2]; print type(x).__new__(x.__class__)
x = 2.34; print type(x).__new__(x.__class__)
x = '13'; print type(x).__new__(x.__class__)
x = 1.0j; print type(x).__new__(x.__class__)
x = True; print type(x).__new__(x.__class__)
x = (1,2); print type(x).__new__(x.__class__)
jedoch die folgenden drei Versuche geben Sie mir Fehler:
x = None; print type(x).__new__(x.__class__)
x = lambda z: z**2; print type(x).__new__(x.__class__)
x = object; print type(x).__new__(x.__class__)
Die Fehler sind (jeweils):
TypeError: object.__new__(NoneType) is not safe, use NoneType.__new__()
TypeError: Required argument 'code' (pos 1) not found
TypeError: type() takes 1 or 3 arguments
Warum funktionieren diese drei Beispiele nicht? (Hinweis: für das lambda
Beispiel scheint es, dass ich ein Codefragment übergeben muss, wenn ich die __new__
Methode aufrufen, aber ich weiß nicht, wie das geht.) Ich verwende Python 2.6.
Bitte beachten Sie, dass ich weiß, dass dies nicht unbedingt die Art und Weise ist, wie Sie neue Objekte in echtem Code erstellen möchten, aber mein Zweck ist nicht praktikabel, sondern zu verstehen, wie die Low-Level-Objektmethoden funktionieren.
Und was genau Fehler sagt, wird es für uns vorteilhaft sein .. –
Nachrichten hinzugefügt , Rohit. Danke für den Vorschlag. – rlandster