Python 3.x python3中抽象属性的强制执行
我有一个抽象类Python 3.x python3中抽象属性的强制执行,python-3.x,class,oop,properties,abc,Python 3.x,Class,Oop,Properties,Abc,我有一个抽象类 class Kuku(ABC): def __init__(self): self.a = 4 @property @abstractmethod def kaka(self): pass kaka是一个抽象属性,因此我希望python将其作为继承器中的属性来执行,但它允许我创建: class KukuChild(Kuku): def kaka(self): retur
class Kuku(ABC):
def __init__(self):
self.a = 4
@property
@abstractmethod
def kaka(self):
pass
kaka
是一个抽象属性,因此我希望python将其作为继承器中的属性来执行,但它允许我创建:
class KukuChild(Kuku):
def kaka(self):
return 3
而kuchild().kaka()返回3,就好像它不是属性一样。这是故意的吗?Pycharm也没有强制执行这一点,那么为什么还要在抽象类中添加
属性
装饰器呢?您正在覆盖子类中的kaka
属性。您还必须使用@property
来修饰子对象中被重写的方法:
from abc import ABC, abstractmethod
class Kuku(ABC):
def __init__(self):
self.a = 4
@property
@abstractmethod
def kaka(self):
pass
class KukuChild(Kuku):
@property
def kaka(self):
return 3
KukuChild().kaka # <-- use as an attribute, not a method call.
从abc导入abc,abstractmethod
库库班(ABC):
定义初始化(自):
self.a=4
@财产
@抽象方法
迪夫卡卡(自我):
通过
KukuChild类(Kuku):
@财产
迪夫卡卡(自我):
返回3
KukuChild().kaka#我知道我能做到这一点,但python或pycharm都没有强迫我这么做。有没有一种方法可以使继承Kuku
而不将kaka
实现为一种属性;您可能可以使用专用的抽象元类。。。