识别类属性类型并调用其函数

时间:2016-06-14 16:51:59

标签: python class oop

我已经定义了一个班级Field。我还定义了AB,它们是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

1 个答案:

答案 0 :(得分:1)

我认为你正在寻找isinstance内置:

if isinstance(attribute, Field):
    ...

或可能:

if isinstance(getattr(self, attribute), Field):
    ...

因为看起来attribute可能是代码中属性的字符串名称。

应该注意的是,通常情况下,构建数据更好,因此它包含所有同类型。然后,您不需要进行任何类型检查等等 - 尽管很难说这个建议是否对您在问题中发布的通用示例代码有帮助。