识别类的属性类型,并调用其功能

问题描述:

我已经定义的类Field。我还定义AB,这是Field子类。识别类的属性类型,并调用其功能

现在我已经定义的其他类Tool。它可以包含类变量,它可以是类型类Field,或其它类,或正常可变的。如果变量类型为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 

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

if isinstance(attribute, Field): 
    ... 

或可能:

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

因为它看起来像attribute可在属性的字符串名称您码。

需要指出的是,一般来说,最好是构造数据,使其包含所有同类型。那么你不需要做任何类型检查等 - 尽管很难说这个建议是否有助于你在问题中发布的通用示例代码。

+0

但是,当我使用DIR()他们都是字符串类型得到的属性列表如何,我知道它的类型 –

+0

@ Rohit.nib - 对,我为什么说这是这里很难给出建议。反思“自我”的属性有点奇怪。通常你想提前知道属性是什么(及其类型)。 – mgilson

+0

我刚刚写了一个sudo代码,只是为了解释我需要什么。我们可以采取其他方式吗?我只是想执行obj的功能取决于它的类型 –