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

Reply via email to