我已经定义了一个班级Field
。我还定义了A
和B
,它们是Field
的子类。
现在我已经定义了另一个类Tool
。它可以包含类变量,它可以是类Field
类型,也可以是其他类,或者 normal 变量。如果变量属于Field
类型,则调用fun1
并收集结果。
请以任何方式提出建议。我是面向对象编程的新手。
class Field(object):
def fun1(self):
return 'Field'
class A(Field):
def fun1(self):
return 'A fun1'
class B(Field):
def fun1(self):
return 'B fun1'
class Tool(object):
a1 = A()
b1 = B()
c1 = 'abc'
def fun1(self):
all_attributes = dir(self)
result_list = []
for attribute in all_attributes:
if attribute is of type Field:
result_list.append(attribute.fun1())
return return_list
答案 0 :(得分:1)
我认为你正在寻找isinstance
内置:
if isinstance(attribute, Field):
...
或可能:
if isinstance(getattr(self, attribute), Field):
...
因为看起来attribute
可能是代码中属性的字符串名称。
应该注意的是,通常情况下,构建数据更好,因此它包含所有同类型。然后,您不需要进行任何类型检查等等 - 尽管很难说这个建议是否对您在问题中发布的通用示例代码有帮助。/ p>