python3中抽象属性的强制实施

时间:2019-05-28 08:07:52

标签: 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): 
         return 3

和KukuChild()。kaka()返回3,就好像它不是属性一样。这是故意的吗? Pycharm也不执行此操作,那么为什么还要在抽象类中添加property装饰器?

1 个答案:

答案 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.