recherche

Maison  >  Questions et réponses  >  le corps du texte

Novice en Python concernant l'échec des méthodes dans les classes pour obtenir des variables

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 ?

仅有的幸福仅有的幸福2807 Il y a quelques jours894

répondre à tous(4)je répondrai

  • 三叔

    三叔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.

    répondre
    0
  • 阿神

    阿神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.

    répondre
    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

    répondre
    0
  • 仅有的幸福

    仅有的幸福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 nugetset,建议使用@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.

    répondre
    0
  • Annulerrépondre