Try This:
class Choices(object):
choices_ = set(["Boss"])
@classmethod
def choices(cls):
return list(cls.choices_)
class ChoicesA(Choices):
choices_ = set(['A'])
>> ChoicesA.choices()
>> ['A']
Haben Sie die Änderung ??
Ich machte nur Entscheidungen öffentlich (früher war es privat).
Jetzt ist hier die Erklärung:
Wenn wir __Choices verwenden, bevor sie automatisch Ausführung Python die Namen der privaten Mitglieder ändert. So werden die Entscheidungen in Klasse A zu _A__choices und __choices in Klasse B werden zu _B__choices. Und beide werden von der Kindklasse zugänglich sein. So wird Code umgewandelt in:
class Choices(object):
_Choices__choices = set(["Boss"])
@classmethod
def choices(cls):
return list(cls._Choices__choices)
class ChoicesA(Choices):
_ChoicesA__choices = set(['A'])
Und Sie werden ['Boss'] als Ergebnis erhalten.
Und dies wird nur getan, um zu vermeiden, die privaten Mitglieder der Elternklassen durch die Kindklasse zu überschreiben. In Python ist nichts privat und alles von der Elternklasse wird in der Kindklasse vererbt.
Sie können dies versuchen:
print(ChoicesA._ChoicesA__choices) # ['A']
print(ChoicesA._Choices__choices) # ['Boss']
Das Konzept der Umsetzung der Namen wird Mangeln genannt.
Thanks.Ich möchte nicht das Elternattribut ändern, aber das Kind Attribut. Aber ich möchte die Methode einmal im Elternteil definieren. –
fand ich eine Lösung: 'Klasse Choices (Objekt): _Choices = set ([ "Boss"]) def Auswahl @classmethod (cls): Rückgabeliste (cls._choices) Klasse ChoicesA (Auswahl) : _choices = set (['A']) ' –