根据类型过滤类的属性

时间:2014-11-27 19:55:52

标签: python python-3.x

我想基于类型过滤类的对象的属性。

答案将围绕inspect,“列表理解”,type()__dict__dict(),但我不能让它发挥作用。

class A():
    def __init__(self, value):
        self.x = value

    def __str__(self):
        return "value = {}\n".format(self.x)

class T():
    def __init__(self):
        self.a1 = A(1)
        self.a2 = A(2)
        self.b = 4

t = T()

我想在类A

中仅打印T类型的属性
class T():
    def __init__(self):
        self.a1 = A(1)
        self.a2 = A(2)
        self.b = 4

    def __str__(self):
         ret = ""
         for i in [*magic*]:
             ret += str(i)
         return ret

输出应该是这样的:

value = 10
value = 15

1 个答案:

答案 0 :(得分:2)

您可以使用vars(self)获取本地属性的字典,然后使用isinstance()测试值:

def __str__(self):
    ret = ""
    for i in vars(self).values():
        if isinstance(i, A):
            ret += str(i)
    return ret

vars()基本上会在此处返回self.__dict__,但更清晰。

将此转化为单线诉求的列表理解:

def __str__(self):
    return ''.join([i for i in vars(self).values() if isinstance(i, A)])