在 Python 中的 @abstractmethod 函数前添加 @属性 的用法
the usage of adding @property before an @abstractmethod function in Python
在抽象基class的设计中,我可以发现如下场景。为抽象基class中的方法添加@属性的设计考虑是什么?当我实现相关功能时,例如,这里的 f1
与实现 f1
相比有什么区别吗,后者没有 @property
装饰器?
@abstractmethod
def f(self)
pass
@property
@abstractmethod
def f1(self)
pass
这将是一个摘要 属性。 From docs:
A subclass of the built-in property()
, indicating an abstract property.
This special case is deprecated, as the property()
decorator is now correctly identified as abstract when applied to an abstract method:
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
在抽象基class的设计中,我可以发现如下场景。为抽象基class中的方法添加@属性的设计考虑是什么?当我实现相关功能时,例如,这里的 f1
与实现 f1
相比有什么区别吗,后者没有 @property
装饰器?
@abstractmethod
def f(self)
pass
@property
@abstractmethod
def f1(self)
pass
这将是一个摘要 属性。 From docs:
A subclass of the built-in
property()
, indicating an abstract property.This special case is deprecated, as the
property()
decorator is now correctly identified as abstract when applied to an abstract method: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