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 ?
Pour faire simple, votre fonction get n'a pas assigné vos variables "haha" et 20 aux attributs de la classe
La flèche que vous avez dessinée pointe en fait vers les deux fonctions get ci-dessus, et non vers votre fonction Attr.
Votre
cat.get_name("哈哈")
返回了一个局部变量new_name
的值, 并没有改变self.new_name
的值,所以执行self.name = self.get_name(self.new_name)
之后self.name
仍是0
.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):
def get_age(self, new_age):
Ou fournissez la méthode définie :
def set_new_name(self, new_name):
def set_new_age(self, new_age):
def get_name(self):
def get_age(self):
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 nu
get
和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.