Python – Beim Ausführen des Programms tritt ein Fehler auf
过去多啦不再A梦
过去多啦不再A梦 2017-06-22 11:52:35
0
1
787
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

Wenn dieses Programm ausgeführt wird, kann es nur dann normal ausgeführt werden, wenn es sich bei der Punktzahl um eine private Variable handelt, oder was? Wenn Sie es nur auf self.score = Score setzen, wird die Fehlermeldung „Maximale Rekursionstiefe beim Aufruf eines Python-Objekts überschritten“ angezeigt. Bitte geben Sie mir eine Antwort

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

Antworte allen(1)
洪涛

会产生这个困惑的原因是对python的getter装饰器和setter装饰器不够熟悉

当你声明了对score属性的setter装饰器之后, 实际上对这个score进行赋值就是调用这个setter装饰器绑定的方法

所以你的setter要访问的成员变量不能和setter方法同名, 不然就相当于一个无尽的迭代:

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

当然会报超过最大迭代深度的错误了

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage