Rumah  >  Soal Jawab  >  teks badan

Pemula Python mengenai kegagalan kaedah dalam kelas untuk mendapatkan pembolehubah

Kod adalah seperti berikut:

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

Hasil pelaksanaan:

Soalan saya:


Saya telah melepasi 2 nilai, satu haha ​​​​dan satu 20
Mengapa ia masih dicetak sebagai 0?

仅有的幸福仅有的幸福2675 hari yang lalu791

membalas semua(4)saya akan balas

  • 三叔

    三叔2017-06-22 11:55:00

    Ringkasnya, fungsi get anda tidak menetapkan pembolehubah anda "haha" dan 20 kepada atribut kelas

    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

    Anak panah yang anda lukis sebenarnya menunjukkan kepada dua fungsi get di atas, bukan fungsi Attr anda.

    balas
    0
  • 阿神

    阿神2017-06-22 11:55:00

    Anda cat.get_name("哈哈") 返回了一个局部变量 new_name 的值, 并没有改变 self.new_name 的值,所以执行 self.name = self.get_name(self.new_name) 之后 self.name 仍是 0.

    balas
    0
  • 巴扎黑

    巴扎黑2017-06-22 11:55:00

    Atribut new_name dan new_age anda tergolong dalam atribut Cat Untuk menetapkan dan mengakses atribut kelas, anda mesti menggunakan objek kelas dalam kelas ini adalah diri (mewakili objek kelas ini boleh difahami sebagai penunjuk ini dalam C++, melalui diri Anda. boleh memanggil atribut dan kaedah kelas), dan anda tidak memberikan nilai kepada atribut kelas dalam get_name dan get_age, tetapi hanya mengembalikan data yang diluluskan oleh kaedah, jadi atribut new_name dan new_age Cat kelas belum ditetapkan semula dan kekal sama 0. Jika anda ingin menukar new_name dan nilai new_age kelas Cat, anda boleh menukarnya kepada:


    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
    
    

    Atau sediakan kaedah set:


    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

    balas
    0
  • 仅有的幸福

    仅有的幸福2017-06-22 11:55:00

    def get_name(self, new_name):
        return new_name

    Ini hanya mengembalikan parameter fungsi secara langsung dan tidak melakukan apa-apa lagi. Anda boleh cuba laksanakan print(cat.get_name('xxx')),查看这个函数的返回结果。类属性new_name依然是0。因此,在Attributes中,相当于传进去的是0,所以self.name得到的也是0。这就是打印出来的结果依然是0 alasan.

    Tetapi nampaknya anda masih di peringkat permulaan, dan anda mungkin telah berpindah dari Java. . . Jadi jika anda ingin menyelesaikan masalah jenis ini secara asas, saya mempunyai cadangan berikut.

    • Jangan gunakannya telanjanggetset,建议使用@property, cari kata kunci ini untuk mempelajari ilmu berkaitan.

    • Anda berada dalam Cat类中尝试用self去访问name,表明你希望这是一个实例属性。实例属性请全部放在__init__, jangan mulakan sifat instance dalam kaedah lain.

    Adalah disyorkan untuk menyatukan lagi asas Python.

    balas
    0
  • Batalbalas