Ich ändere einige meiner Klassen von einer umfangreichen Verwendung von Gettern und Setzern zu einer pythonischeren Verwendung von Eigenschaften.
Aber jetzt stecke ich fest, weil einige meiner vorherigen Getter oder Setter die entsprechende Methode der Basisklasse aufrufen und dann etwas anderes ausführen würden. Aber wie kann dies mit Eigenschaften erreicht werden? Wie rufe ich den Property Getter oder Setter in der übergeordneten Klasse auf?
Nur das Aufrufen des Attributs selbst führt natürlich zu einer unendlichen Rekursion.
class Foo(object):
@property
def bar(self):
return 5
@bar.setter
def bar(self, a):
print a
class FooBar(Foo):
@property
def bar(self):
# return the same value
# as in the base class
return self.bar # --> recursion!
@bar.setter
def bar(self, c):
# perform the same action
# as in the base class
self.bar = c # --> recursion!
# then do something else
print 'something else'
fb = FooBar()
fb.bar = 7
Foo.bar.fset(self, c)
einen geerbten Setter hinzuziehen? Warum nichtFoo.bar.fset(c)
- ohne das "Selbst" - dachte ich, dies sei implizit vorbei?