Novice en Python concernant l'échec des méthodes dans les classes pour obtenir des variables
仅有的幸福
仅有的幸福 2017-06-22 11:53:00
0
4
830

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 ?

仅有的幸福
仅有的幸福

répondre à tous(4)
三叔

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.

阿神

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):

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
仅有的幸福
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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal