编程语言
首页 > 编程语言> > Python:使类可迭代

Python:使类可迭代

作者:互联网

我继承了一个项目,其中包含许多大类,只有类对象(整数,字符串等).我希望能够检查属性是否存在而无需手动定义属性列表.

是否可以使用标准语法使python类本身可迭代?也就是说,我希望能够在Foo中使用attr来迭代所有类的属性:(或者甚至在Foo中使用attr),而无需首先创建类的实例.我想我可以通过定义__iter__来做到这一点,但到目前为止我还没有完全管理我正在寻找的东西.

通过添加__iter__方法,我已经实现了我想要的一些东西:

class Foo:
    bar = "bar"
    baz = 1
    @staticmethod
    def __iter__():
        return iter([attr for attr in dir(Foo) if attr[:2] != "__"])

但是,这并不能完全满足我的需求:

06001

即便如此,这仍然有效:

06002

解决方法:

将__iter__添加到元类而不是类本身(假设Python 2.x):

class Foo(object):
    bar = "bar"
    baz = 1
    class __metaclass__(type):
        def __iter__(self):
            for attr in dir(self):
                if not attr.startswith("__"):
                    yield attr

对于Python 3.x,请使用

class MetaFoo(type):
    def __iter__(self):
        for attr in dir(self):
            if not attr.startswith("__"):
                yield attr

class Foo(metaclass=MetaFoo):
    bar = "bar"
    baz = 1

标签:python,syntax,loops,attributes,static-methods
来源: https://codeday.me/bug/20190928/1826973.html