python - ralat berlaku semasa menjalankan program
过去多啦不再A梦
过去多啦不再A梦 2017-06-22 11:52:35
0
1
788
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

过去多啦不再A梦
过去多啦不再A梦

membalas semua(1)
洪涛

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:

self.score(self.score(self.score(self.score(self.score........ 无尽的迭代,

Sudah tentu, ralat melebihi kedalaman lelaran maksimum akan dilaporkan

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