class Person(object):
def __init__(self,name):
self.name = name
class Teacher(Person):
def __init__(self,score):
self.__score = score
class Student(Teacher,Person):
def __init__(self,name,score):
Person.__init__(self,name)
super(Student,self).__init__(score)
@property
def score(self):
return self.__score
@score.setter
def score(self,score):
if score<0 or score >100:
raise ValueError('invalid score')
self.__score = score
def __str__(self):
return 'Student:%s,%d' %(self.name,self.score)
s1 = Student('Jack',89)
s1.score = 95
print s1
Apabila menjalankan program ini, ia hanya boleh berjalan seperti biasa apabila skor adalah pembolehubah persendirian Adakah ia beberapa ciri harta itu, atau apa? Jika anda hanya menetapkannya kepada self.score = skor, ralat 'kedalaman rekursi maksimum melebihi semasa memanggil objek Python' akan muncul
Sebab kekeliruan ini ialah anda tidak cukup kenal dengan penghias pengambil ular sawa dan penghias penetap
Selepas anda mengisytiharkan penghias penetap untuk atribut skor, sebenarnya memberikan skor adalah untuk memanggil kaedah yang terikat oleh penghias penetap
Jadi pembolehubah ahli yang ingin diakses oleh penetap anda tidak boleh mempunyai nama yang sama dengan kaedah penetap, jika tidak, ia akan bersamaan dengan lelaran yang tidak berkesudahan:
Sudah tentu, ralat melebihi kedalaman lelaran maksimum akan dilaporkan