首页 > 解决方案 > 强制保存具有常量名称的类型对象的抽象类

问题描述

我正在创建一个抽象类,我希望它的所有继承都包含具有确切名称的 X 类型对象。

看一个例子:

from abc import ABC, abstractmethod

class Hands(object):
    pass

class human(ABC):

    def __init__(self):

        self.hand=Hands()

        @property
        def Hands(self):
            pass

class american_hands(Hands):
    pass


#I want to make sure that a class of type human will have a member of type hands which is called hand
class american(human):

    def __init__(self):
        self.hand=american_hands()

如何强制人类类的后代持有具有预定义名称的所需类型的成员?

例如,我希望任何在human没有 Hand 类型的 self.hand 的情况下实现类的人都会引发错误,例如:

class German(Human):
    def __init__(self):
        super().__init__()

行不通。

标签: python

解决方案


也许像

class Hands:
    pass


class AmericanHands(Hands):
    pass


class Human:
    hand_type = Hands

    def __init__(self):
        self.hands = self.hand_type()


class American(Human):
    hand_type = AmericanHands

    def __init__(self):
        super().__init__()
        # Other American-specific initialization


h = Human()  # assert isinstance(h.hands, Hands)
a = American()  # assert isinstance(a.hands, AmericanHands)

调用super().__init__确保 的实例American具有名为 的属性hands,而覆盖类属性确保类型hands正确。


推荐阅读