【发布时间】:2020-11-25 06:31:34
【问题描述】:
我在 python 3.6 中尝试过这段代码
from abc import ABC, abstractmethod
class A(ABC):
@property
@abstractmethod
def prop1(self):
pass
@prop1.setter
@abstractmethod
def prop1(self, val):
pass
class B(A):
def __init__(self, val=None):
self._prop = val
@A.prop1.setter
def prop1(self, val):
if val == "something":
self._prop = val
else:
self._prop = "nothing"
@A.prop1.getter
def prop1(self):
return self._prop
def do_something(self):
self.prop1 = "blah"
我收到错误 TypeError: Can't instantiate abstract class B with abstract methods prop1。但是,如果我像这样从覆盖的 getter 中删除 @A,则代码可以正常工作。
@prop1.getter
def prop1(self):
return self._prop
此外,getter 高于或低于 setter 并不重要。只有第一个似乎需要@A.。为什么会这样?
【问题讨论】:
标签: python python-3.x python-decorators