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?
Ringkasnya, fungsi get anda tidak menetapkan pembolehubah anda "haha" dan 20 kepada atribut kelas
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):
def get_age(self, new_age):
Atau sediakan kaedah set:
def set_new_name(self, new_name):
def set_new_age(self, new_age):
def get_name(self):
def get_age(self):
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 telanjang
get
和set
,建议使用@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.