python - 强制保存具有常量名称的类型对象的抽象类
问题描述
我正在创建一个抽象类,我希望它的所有继承都包含具有确切名称的 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__()
行不通。
解决方案
也许像
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
正确。
推荐阅读
- docker - docker-compose up 上的 CKAN 错误(命令 'db' 未知(您可能需要运行 setup.py egg_info))
- docker - 我可以使用 mariadb-server 本地安装运行 mariadb 的 docker 吗?
- c# - .net 核心无法连接到 postgres(docker compose)
- javascript - 垂直显示不同列中的数字数组
- git - git tf clone 找不到 JAR “com.microsoft.gittf.client.clc”
- java - 如何在 Amazon Linux 上安装 dplyr-snowflakedb 和 rJava?
- python - 过滤pandas DataFrame中给定值介于两列值之间的所有行
- office-ui-fabric - 如何在 FluentUI DetailsList onRender 函数中使用 React refs
- c# - 无法将实体推送到数据库
- javascript - 我想在 onclick 上调用一个函数,但该函数应该在另一个函数中