Maison > Questions et réponses > le corps du texte
Le code est le suivant :
class Cat:
#属性
new_name = 0
new_age = 0
#方法
def get_name(self,new_name):
return new_name
def get_age(self,new_age):
return new_age
def Attributes(self):
self.name = self.get_name(self.new_name)
self.age = self.get_age(self.new_age)
print(self.name)
print(self.age)
def show(self):
print(self.name)
print(self.age)
#cat = Cat()
cat = Cat()
cat.get_name("哈哈")
cat.get_age(20)
cat.Attributes()
cat.show()
Résultat de l'exécution :
Ma question :
J'ai passé 2 valeurs, une haha et une 20
Pourquoi est-il toujours imprimé comme 0 ?
三叔2017-06-22 11:55:00
Pour faire simple, votre fonction get n'a pas assigné vos variables "haha" et 20 aux attributs de la classe
def get_name(self):
return new_name
def get_age(self):
return new_age
加两个设置函数
def set_name(self,new_name):
self.new_name = new_name
def set_age(self,new_age):
self.new_age = new_age
La flèche que vous avez dessinée pointe en fait vers les deux fonctions get ci-dessus, et non vers votre fonction Attr.
阿神2017-06-22 11:55:00
Votre cat.get_name("哈哈")
返回了一个局部变量 new_name
的值, 并没有改变 self.new_name
的值,所以执行 self.name = self.get_name(self.new_name)
之后 self.name
仍是 0
.
巴扎黑2017-06-22 11:55:00
Vos attributs new_name et new_age appartiennent aux attributs Cat. Pour attribuer et accéder aux attributs de classe, vous devez utiliser des objets de classe. L'accès dans cette classe est self (représenter l'objet de cette classe peut être compris comme le pointeur this en C++, via self You. peut appeler les attributs et les méthodes de la classe), et vous n'avez pas attribué de valeurs aux attributs de la classe dans get_name et get_age, mais avez simplement renvoyé les données transmises par la méthode, donc les attributs new_name et new_age du Cat class n'ont pas été réaffectés et restent les mêmes. 0. Si vous souhaitez modifier les valeurs new_name et new_age de la classe Cat, vous pouvez les remplacer par :
def get_name(self, new_name):
self.new_name = new_name
return self.new_name
def get_age(self, new_age):
self.new_age = new_age
return self.new_age
Ou fournissez la méthode définie :
def set_new_name(self, new_name):
self.new_name = new_name
def set_new_age(self, new_age):
self.new_age = new_age
def get_name(self):
return self.new_name
def get_age(self):
return self.new_age
仅有的幸福2017-06-22 11:55:00
def get_name(self, new_name):
return new_name
Cela renvoie simplement les paramètres de la fonction directement et ne fait rien d'autre. Vous pouvez essayer de mettre en œuvre print(cat.get_name('xxx'))
,查看这个函数的返回结果。类属性new_name
依然是0
。因此,在Attributes
中,相当于传进去的是0,所以self.name
得到的也是0
。这就是打印出来的结果依然是0
raisons.
Mais il semble que vous soyez encore au stade d'entrée de gamme et que vous ayez peut-être transféré depuis Java. . . Donc, si vous souhaitez résoudre fondamentalement ce type de problème, j'ai les suggestions suivantes.
Ne l'utilisez pas nuget
和set
,建议使用@property
, recherchez ce mot-clé pour acquérir des connaissances connexes.
Vous êtes dans Cat
类中尝试用self
去访问name
,表明你希望这是一个实例属性。实例属性请全部放在__init__
, n'initialisez pas les propriétés de l'instance dans d'autres méthodes.
Il est recommandé de consolider davantage la fondation Python.