Python可以只在子类/具体类中存在属性吗

时间:2019-04-30 23:12:36

标签: python-3.x object-oriented-analysis

我想做类似下面的事情。但是我不确定的一件事是,“ expected_limbs”仅存在于具体的类中。我有一个方法在“宠物”类中引用“ expected_limbs”,但实际上没有该属性。这在运行时应该没问题,但是我很好奇,如果不是,那么正确的方法是什么?我总是可以在抽象类中将其设置为“无”,但看起来并不完美。

from abc import ABC, abstractmethod

class Pet(ABC):

    def __init__(self, name, limbs):
        self.name = name
        self.limbs = limbs

    def has_all_limbs(self):
        for limb, limb_count in self.expected_limbs.items():
            if self.limbs[limb] != limb_count:
                return False
        else:
            return True

    @abstractmethod
    def speak(self):
         pass


class Dog(Pet):

    def __init__(self, name, limbs):
        super().__init__(name, limbs)
        self.expected_limbs = {"legs": 4}

    def speak(self):
        print("Bark")


class Bird(Pet):

    def __init__(self, name, limbs):
        super().__init__(name, limbs)
        self.expected_limbs = {"legs": 2, "wings": 2}

    def speak(self):
        print("Chirp")

运行时还可以。

toucan = Bird("Sam", {"legs": 2, "wings": 1})
print(toucan.has_all_limbs())
False

0 个答案:

没有答案