2017-01-12 3 views
2

Ich versuche nur, einen Code wie super und __new__ zu verwenden. Hier ist der Code:TypeError Objekt nimmt keine Parameter

class Person(object): 
    def __new__(cls, name, age): 
     print('__new__called') 
     return super(Person, cls).__new__(cls, name, age) 
    def __init__(self, name, age): 
     print('__init__called') 
     self.name = name 
     self.age = age 
    def __str__(self): 
     return('<Person:%s(%s)>'%(self.name, self.age)) 
if __name__ == '__main__': 
    piglei = Person("piglei", 24) 
    print(piglei) 

Python wirft eine TypeError und sagt etwas über die Leitung 4, object() takes no parameters.

Antwort

1

object.__new__ akzeptiert keine Argumente. Ihr super Anruf in __new__ fehl:

return super(Person, cls).__new__(cls, name, age) 

, da Sie auch name und age bis zu object.__new__ passieren.

Sie müssen diese nicht übergeben bis object; entweder fallen die __new__ Definition alle zusammen oder geben sie nicht eines der Argumente, um es:

return super(Person, cls).__new__(cls) 

So oder so, es gibt wirklich keinen Grund, __new__ hier zu verwenden, aber ich vermute, Sie experimentieren. Wenn Sie sind, nehmen Sie zur Kenntnis, dass Sie auch Person und cls in super fallen kann und es verwenden, ist null Argument Form, das heißt:

return super().__new__(cls) 
Verwandte Themen