python for循环的类属性?

时间:2018-09-20 13:32:23

标签: python class

如果某个参数不等于None,有没有一种方法可以让我在类中循环使用一个函数?我知道如何通过很多if循环来做到这一点,但是还有另一种方法可以做到这一点吗?

这是我想做的一个例子:

class Name:
    def __init__(self,name,favfood,favcolour,favsport):
        self.name = name
        self.favfood = favfood
        self.favcolour = favcolour
        self.favsport = favsport

henry = Name("Henry","Sushi","Blue",None)

我想要一个打印出他所有喜欢的东西的函数,但是如果它是None,它将跳过它,这几乎是类的for循环。

是否可以为类中的每个属性创建一个forloop?

2 个答案:

答案 0 :(得分:1)

您可以使用self对象的__dict__属性:

class Name:
    def __init__(self,name,favfood,favcolour,favsport):
        self.name = name
        self.favfood = favfood
        self.favcolour = favcolour
        self.favsport = favsport
        for key, value in self.__dict__.items():
            if value is not None:
                print('%s: %s' % (key, value))

henry = Name("Henry","Sushi","Blue",None)

这将输出:

name: Henry
favfood: Sushi
favcolour: Blue

答案 1 :(得分:0)

*已更新将使用__dict__属性作为@blhsing建议

class Name:
    def __init__(self,name,favfood,favcolour,favsport):
        self.name = name
        self.favfood = favfood
        self.favcolour = favcolour
        self.favsport = favsport

    def print_favs(self):
        '''even better using @blh method'''
        [print(f'{k}: {v}') for k, v in self.__dict__.items() if v != None]



henry = Name("Henry","Sushi","Blue",None)
henry.print_favs()
(xenial)vash@localhost:~/python/stack_overflow$ python3.7 helping.py 
name: Henry
favfood: Sushi
favcolour: Blue