【发布时间】:2019-12-04 03:19:16
【问题描述】:
我定义了几个类
class Animal:
def do_parent_method():
pass
class Monkey(Animal):
pass
class Elephant(Animal):
pass
@dataclass
class Zoo:
monkey: Monkey= Monkey()
elephant: Elephant = Elephant()
start_time: datetime = None
name: str = 'Not important at all'
def data_format(self):
items = [self.monkey, self.elephant] # Now I hard code here
for item in items:
do_something()
重点是如何获取Zoo类中的属性
也许有一天,我们会在代码中添加另一种动物
@dataclass
class Zoo:
monkey: Monkey= Monkey()
elephant: Elephant = Elephant()
start_time: datetime = None
name: str = 'Not important at all'
def data_format(self):
items = [get the attributes that extends from Animal] # How to do?
for item in items:
do_parent_method()
现在我只希望items 成为一个列表,以便我可以对其进行循环。
或者如果你有其他好主意对我也有好处。
注意:
Zoom 类中的所有属性只有一些 str、datetime、int 类型。所有其他实例将是 Animal 类的子类。
固定:
不小心把'zoo'输入'zoom'
【问题讨论】:
-
@Pynchia:我不明白这有什么关系。简单的
isinstance检查在这里工作得很好,你不需要所有子类的详尽集合来做到这一点。 -
鉴于 OP 想要所有的动物,为什么必须按名称实例化一个类 var 并进行硬编码?自动实例化它们,每个子类一个并将它们存储在列表中
items = [s() for s in Animal.__subclasses__()]
标签: python python-3.x python-dataclasses