принудительное применение абстрактных свойств в python3 - PullRequest
0 голосов
/ 28 мая 2019

У меня есть этот абстрактный класс

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 Ответ

1 голос
/ 28 мая 2019

Вы переопределяете свойство 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.
...