我已经第一次探索@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()
,但是我想知道是否有办法它具有上面的属性语法。
答案 0 :(得分:0)
docs表明可以覆盖这样的setter属性:
...: class D(C):
...: @C.x.setter #override setter
...: def x(self):
...: pass
现在可以实例化子类D:
In [128]: d = D()
In [129]