Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x python3中抽象属性的强制执行_Python 3.x_Class_Oop_Properties_Abc - Fatal编程技术网

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
实现为一种属性;您可能可以使用专用的抽象元类。。。