Hi. I couldn't find a way to overwrite a property declared using a decorator in
a parent class. I can only do this if I use the "classic" property() method
along with a getter function. Here's an example:
#!/usr/bin/python3
class Polite:
def __init__(self):
self._greeting = "Hello"
def get_greeting(self, suffix=", my dear."):
return self._greeting + suffix
greeting1 = property(get_greeting)
@property
def greeting2(self, suffix=", my dear."):
return self._greeting + suffix
class Rude(Polite):
@property
def greeting1(self):
return self.get_greeting(suffix=", stupid.")
@property
def greeting2(self):
return super().greeting2(suffix=", stupid.")
p = Polite()
r = Rude()
print("p.greeting1 =", p.greeting1)
print("p.greeting2 =", p.greeting2)
print("r.greeting1 =", r.greeting1)
print("r.greeting2 =", r.greeting2) # TypeError: 'str' object is not callable
In this example I can easily overwrite the greeting1 property. But the
inherited greeting2 doesn't seem to be a property but a mere string.
I use a lot of properties decorators for simple properties in a project and I
hate mixing them with a couple of "undecorated" properties that have to be
overwritten in child classes. I tried using @greeting2.getter decorator and
tricks like this but inheritance overwriting failed every time I used
decorators.
Can someone tell me a way to use decorator-declared properties that can be
overwritten in child classes?? That would be nice.
--
http://mail.python.org/mailman/listinfo/python-list