2017-01-12 50 views
2

我只是試圖編寫代碼如何使用super__new__。下面的代碼:TypeError對象不需要參數

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會引發TypeError,並說一些關於4號線,object() takes no parameters

回答

1

object.__new__不接受任何參數。你super呼叫__new__將失敗:

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

,因爲你傳遞nameage高達object.__new__

你不需要通過這些達到object;無論是一起掉落__new__定義,或者沒有任何的參數傳遞給它:

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

無論哪種方式,實在沒有理由在這裏使用__new__但我猜你嘗試。如果你是,請注意,您還可以在super下降Personcls和使用它的無參數的形式,即:

return super().__new__(cls) 
相關問題