美文网首页
python 子类中扩张超类属性

python 子类中扩张超类属性

作者: SkTj | 来源:发表于2019-12-03 13:46 被阅读0次

setting delete

考虑如下的代码,它定义了一个property:

class Person:
def init(self, name):
self.name = name

# Getter function
@property
def name(self):
    return self._name

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

# Deleter function
@name.deleter
def name(self):
    raise AttributeError("Can't delete attribute")

下面是一个示例类,它继承自Person并扩展了 name 属性的功能:

class SubPerson(Person):
@property
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')
Setting name to Guido
s.name
Getting name
'Guido'
s.name = 'Larry'
Setting name to Larry
s.name = 42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "example.py", line 16, in name
raise TypeError('Expected a string')
TypeError: Expected a string

如果你仅仅只想扩展property的某一个方法,那么可以像下面这样写:

class SubPerson(Person):
@Person.name.getter
def name(self):
print('Getting name')
return super().name
或者,你只想修改setter方法,就这么写:

class SubPerson(Person):
@Person.name.setter
def name(self, value):
print('Setting name to', value)
super(SubPerson, SubPerson).name.set(self, value)

相关文章

  • python 子类中扩张超类属性

    setting delete 考虑如下的代码,它定义了一个property: class Person:def ...

  • JAVA——继承知识解惑及使用

    1. 继承的特性 子类拥有父类非private的属性,方法。 子类可以拥有自己的属性和方法,即子类可以对父类进行扩...

  • 每天学一点Swift----面向对象下(二)

    二.类的构造和析构 1.通过集成后,子类中不仅有父类中的存储属性,还有子类自己的存储属性。子类中的所有存储属性都必...

  • Python3中的MRO C3算法

    我们知道python中的类与类之间是可以相互继承的。在继承关系中,子类自动拥有父类中除了私有属性之外的其他所有内容...

  • 父类属性和子类属性同名

    上转型中: 如果父类中的属性和子类的属性同名的时候, 父类对象认为认为子类的属性是特有的 , 父类定义的对象只...

  • iOS子类属性替换父类属性

    父类扩展类中声明了属性A。子类在扩展类中声明了属性B。且A,B同名。先在子类中self.B初始化赋值。则在父类中的...

  • 父类属性和子类属性同名

    上转型中: 1. 如果父类中的属性和子类的属性同名的时候, 父类对象认为认为子类的属性是特有的 , 父类定义的对象...

  • python 在子类中拓展属性

    8.8 我们想在子类中扩展某个属性,而这个属性是在父类中定义的 我们从Person类中继承,然后在子类中扩展nam...

  • Python基础33-面向对象(继承资源(属性与方法)的使用注意

    在Python中, 继承是指子类对父类资源的使用权 1 继承-属性与方法的使用权限 1.1 测试属性与方法分别如下...

  • 2_8.类的继承

    提高代码的重复性, 复用性 class 子类名 extends 父类名{子类的属性子类的方法} 子类只能获得父类中...

网友评论

      本文标题:python 子类中扩张超类属性

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