【问题标题】:the usage of adding @property before an @abstractmethod function in Python在 Python 中 @abstractmethod 函数前添加 @property 的用法
【发布时间】:2021-07-31 19:34:44
【问题描述】:
在抽象基类的设计中,我可以找到以下场景。为抽象基类中的方法添加@property 的设计注意事项是什么。当我实现相关功能时,例如这里的f1,与实现没有@property装饰器的f1相比有什么不同吗?
@abstractmethod
def f(self)
pass
@property
@abstractmethod
def f1(self)
pass
【问题讨论】:
标签:
python
python-3.x
abstract-class
abc
【解决方案1】:
这将是一个抽象属性。 From docs:
内置property()的子类,表示一个抽象属性。
这种特殊情况已被弃用,因为 property() 装饰器现在在应用于抽象方法时被正确识别为抽象:
class C(ABC):
@property
@abstractmethod
def my_abstract_property(self):
...
这将允许您执行以下操作:
class CD(C):
def my_abstract_property(self):
return 1
cd = CD()
print(cd.my_abstract_property)
# Outputs 1
但是,如果你一开始只有一个 @abstractmethod 装饰器,比如
class C(ABC):
@abstractmethod
def my_abstract_property(self):
...
你必须这样做
class CD(C):
def my_abstract_property(self):
return 1
cd = CD()
# vv
print(cd.my_abstract_property())
# Outputs 1