python - une erreur se produit lors de l'exécution du programme
过去多啦不再A梦
过去多啦不再A梦 2017-06-22 11:52:35
0
1
730
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梦

répondre à tous(1)
洪涛

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!