我有这个抽象类
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
和KukuChild()。kaka()返回3,就好像它不是属性一样。这是故意的吗? Pycharm也不执行此操作,那么为什么还要在抽象类中添加property
装饰器?
答案 0 :(得分:1)
您正在覆盖子类中的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.