Python classe--Super variable
Le morceau de code ci-dessous me donne une erreur pour une raison quelconque, quelqu'un Peut me dire quel serait le problème..
En gros, j'ai créer 2 classes de Point & Cercle..Le cercle est en train d'essayer d'hériter de la classe Point.
Code:
class Point():
x = 0.0
y = 0.0
def __init__(self, x, y):
self.x = x
self.y = y
print("Point constructor")
def ToString(self):
return "{X:" + str(self.x) + ",Y:" + str(self.y) + "}"
class Circle(Point):
radius = 0.0
def __init__(self, x, y, radius):
super(Point,self).__init__(x,y)
self.radius = radius
print("Circle constructor")
def ToString(self):
return super().ToString() + \
",{RADIUS=" + str(self.radius) + "}"
if __name__=='__main__':
newpoint = Point(10,20)
newcircle = Circle(10,20,0)
Erreur:
C:\Python27>python Point.py
Point constructor
Traceback (most recent call last):
File "Point.py", line 29, in <module>
newcircle = Circle(10,20,0)
File "Point.py", line 18, in __init__
super().__init__(x,y)
TypeError: super() takes at least 1 argument (0 given)
Avez-vous fait quelques modifications à la source? A votre
init
appel ressembler à ça à l'origine?ToString
, oh! mon (pythonic) les yeux sont des saignementsOriginalL'auteur user1050619 | 2012-05-31
Vous devez vous connecter pour publier un commentaire.
On dirait que vous vous êtes déjà probablement corrigé l'erreur d'origine, qui a été causé par
super().__init__(x,y)
que le message d'erreur indique que, bien que le correctif a été légèrement incorrect, au lieu desuper(Point, self)
de laCircle
classe que vous devez utilisersuper(Circle, self)
.Remarque qu'il y a un autre endroit qui appelle
super()
de manière incorrecte, à l'intérieur deCircle
'sToString()
méthode:C'est un code valide sur Python 3, mais sur Python 2
super()
requiert des arguments, la réécriture de ce que les suivants:Je recommande également de se débarrasser de la continuation de ligne, voir le Maximum Longueur de la Ligne de la section de la PEP 8 pour la méthode recommandée pour la fixation de ce.
Vous avez raison! Merci.
il convient de recommander que
ToString()
n'est pas (du tout) le bon de penser à faire, c'est ce__str__
est pour.OriginalL'auteur Andrew Clark
super(..)
ne prend que la nouvelle-classes de style. Pour la fixer, étendre la classe Point deobject
. Comme ceci:Aussi la façon correcte de l'utilisation de super(..) c'est comme:
OriginalL'auteur UltraInstinct
OriginalL'auteur Dinu Duke