Maison  >  Questions et réponses  >  le corps du texte

python - une erreur se produit lors de l'exécution du programme

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

Lors de l'exécution de ce programme, il ne peut s'exécuter normalement que lorsque le score est une variable privée. S'agit-il d'une fonctionnalité de la propriété, ou quoi ? Si vous le définissez uniquement sur self.score = score, l'erreur « profondeur de récursion maximale dépassée lors de l'appel d'un objet Python » apparaîtra. Veuillez me donner une réponse

.
过去多啦不再A梦过去多啦不再A梦2675 Il y a quelques jours725

répondre à tous(1)je répondrai

  • PHP中文网

    PHP中文网2017-06-22 11:54:35

    La raison de cette confusion est que vous n'êtes pas assez familier avec le décorateur getter et le décorateur setter de Python

    Après avoir déclaré le décorateur setter pour l'attribut score, l'attribution du score consiste en fait à appeler la méthode liée par le décorateur setter

    Donc la variable membre à laquelle votre setter veut accéder ne peut pas avoir le même nom que la méthode setter, sinon cela équivaudra à une itération sans fin :

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

    Bien sûr, une erreur de dépassement de la profondeur maximale d'itération sera signalée

    répondre
    0
  • Annulerrépondre