How to call a property of the base class if this property is being overwritten in the derived class?

前端 未结 7 746
無奈伤痛
無奈伤痛 2020-11-27 14:13

I\'m changing some classes of mine from an extensive use of getters and setters to a more pythonic use of properties.

But now I\'m stuck because some of my previous

7条回答
  •  南笙
    南笙 (楼主)
    2020-11-27 15:10

    You can use the following template:

    class Parent():
        def __init__(self, value):
            self.__prop1 = value
    
        #getter
        @property
        def prop1(self):
            return self.__prop1
    
        #setter
        @prop1.setter
        def prop1(self, value):
            self.__prop1 = value
    
        #deleter
        @prop1.deleter
        def prop1(self):
            del self.__prop1
      
    class Child(Parent):
    
        #getter
        @property
        def prop1(self):
            return super(Child, Child).prop1.__get__(self)
    
        #setter
        @prop1.setter
        def prop1(self, value):
            super(Child, Child).prop1.__set__(self, value)
    
        #deleter
        @prop1.deleter
        def prop1(self):
            super(Child, Child).prop1.__delete__(self)
    

    Note! All of the property methods must be redefined together. If do not want to redefine all methods, use the following template instead:

    class Parent():
        def __init__(self, value):
            self.__prop1 = value
    
        #getter
        @property
        def prop1(self):
            return self.__prop1
    
        #setter
        @prop1.setter
        def prop1(self, value):
            self.__prop1 = value
    
        #deleter
        @prop1.deleter
        def prop1(self):
            del self.__prop1
    
    
    class Child(Parent):
    
        #getter
        @Parent.prop1.getter
        def prop1(self):
            return super(Child, Child).prop1.__get__(self)
    
        #setter
        @Parent.prop1.setter
        def prop1(self, value):
            super(Child, Child).prop1.__set__(self, value)
    
        #deleter
        @Parent.prop1.deleter
        def prop1(self):
            super(Child, Child).prop1.__delete__(self)
    

提交回复
热议问题