识别类的属性类型,并调用其功能
问题描述:
我已经定义的类Field
。我还定义A
和B
,这是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
可在属性的字符串名称您码。
需要指出的是,一般来说,最好是构造数据,使其包含所有同类型。那么你不需要做任何类型检查等 - 尽管很难说这个建议是否有助于你在问题中发布的通用示例代码。
但是,当我使用DIR()他们都是字符串类型得到的属性列表如何,我知道它的类型 –
@ Rohit.nib - 对,我为什么说这是这里很难给出建议。反思“自我”的属性有点奇怪。通常你想提前知道属性是什么(及其类型)。 – mgilson
我刚刚写了一个sudo代码,只是为了解释我需要什么。我们可以采取其他方式吗?我只是想执行obj的功能取决于它的类型 –