Sid*_*med 20 python python-3.x
我真的不知道这个小代码中的错误在哪里:
class Personne:
def __init__(self, nom, prenom):
print("Appel de la méthode __init__")
self.nom = nom
self.prenom = prenom
def __new__(cls, nom, prenom):
print("Appel de la méthode __new__ de la classe {}".format(cls))
return object.__new__(cls, nom, prenom)
personne = Personne("Doe", "John")
Run Code Online (Sandbox Code Playgroud)
上面给出的代码给出了错误:
Traceback (most recent call last):
File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 21, in <module>
personne = Personne("Doe", "John")
File "/home/bilal/Lien vers python/21_meta_classes/1_instanciation.py", line 14, in __new__
return object.__new__(cls, nom, prenom)
TypeError: object() takes no parameters
Run Code Online (Sandbox Code Playgroud)
Blc*_*ght 31
在Python 3.3及更高版本,如果你要覆盖这两个__new__和__init__,你需要避免传递任何额外的参数给object你覆盖的方法.如果您只覆盖其中一个方法,则允许将额外的参数传递给另一个方法(因为这通常在没有您帮助的情况下发生).
因此,要修复您的类,请更改__new__方法,如下所示:
def __new__(cls, nom, prenom):
print("Appel de la méthode __new__ de la classe {}".format(cls))
return object.__new__(cls) # don't pass extra arguments here!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6627 次 |
| 最近记录: |