【问题标题】: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

【讨论】:

    猜你喜欢
    • 2011-02-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2011-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-01
    相关资源
    最近更新 更多