Pemula Python mengenai kegagalan kaedah dalam kelas untuk mendapatkan pembolehubah
仅有的幸福
仅有的幸福 2017-06-22 11:53:00
0
4
836

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?

仅有的幸福
仅有的幸福

membalas semua(4)
三叔

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.

阿神

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

巴扎黑

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan