美文网首页
python 在子类中拓展属性

python 在子类中拓展属性

作者: 孙广宁 | 来源:发表于2022-05-29 23:37 被阅读0次
8.8 我们想在子类中扩展某个属性,而这个属性是在父类中定义的
class Person:
    def __init__(self,name):
        self.name = name
    @property
    def name(self):
        return self.name

    @name.setter
    def name(self,value):
        if not isinstance(value,str):
            raise TypeError('Expected a String')
        self._name= value

    @name.deleter
    def name(self):
        raise AttributeError("cant delete attribute")

class SubPerson(Person):
    @porperty
    def name(self):
        print("getting name")
        return super().name

    @name.setter
    def name(self,value):
        print("setting name to",value)
        super(SubPerson,SubPerson).name.__set__(self,value)

    @name.deleter
    def name(self):
        print("deleting name")
        super(SubPerson,SubPerson).name.__delete__(self)


s = SubPerson("Guido")
print(s)
print(s.name)
s.name = "Larry"
print(s)
print(s.name)
  • 我们从Person类中继承,然后在子类中扩展name属性的功能
注意
  • 在子类中扩展属性会引入一些非常微妙的问题,因为属性其实是被定义为getter,setter和deleter方法的合集,而不仅仅是单独的方法
  • 因此,当我们扩展一个属性时,需要弄清楚是要重新定义所有方法,还是只针对某一个方法进行扩展

相关文章

网友评论

      本文标题:python 在子类中拓展属性

      本文链接:https://www.haomeiwen.com/subject/vgmnprtx.html