子类中的重写属性设置器抽象方法

时间:2019-04-28 16:25:38

标签: python python-3.x

我已经第一次探索@property装饰器和抽象类,然后与Python文档一起定义了以下类:

In [125]: from abc import ABC, abstractmethod
     ...: class C(ABC):
     ...:     def __init__(self):
     ...:         self._x = None
     ...:     @property
     ...:     def x(self):
     ...:         """I'm the 'x' property"""
     ...:         return self._x
     ...:     @x.setter
     ...:     @abstractmethod
     ...:     def x(self, value):
     ...:         self._x = value
     ...:     @x.deleter
     ...:     def x(self):
     ...:         del self._x
     ...: class D(C):
     ...:     pass

类C中的setter属性为abstractmethod。我知道我必须在类D中重写此setter属性(方法)才能实例化一个对象,但是我不确定该怎么做,因为类C中的所有方法都命名为相同。现在,我知道,我可以只在类C中调用方法getx()setx()等,而在类D中重写setx(),但是我想知道是否有办法它具有上面的属性语法。

1 个答案:

答案 0 :(得分:0)

docs表明可以覆盖这样的setter属性:

  ...: class D(C):
  ...:     @C.x.setter #override setter
  ...:     def x(self):
  ...:         pass

现在可以实例化子类D:

In [128]: d = D()
In [129]