首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >循环遍历python中类的所有成员变量

循环遍历python中类的所有成员变量
EN

Stack Overflow用户
提问于 2009-09-09 07:15:42
回答 8查看 117K关注 0票数 118

如何获得一个可迭代的类中所有变量的列表?有点像locals(),但对于类来说

代码语言:javascript
复制
class Example(object):
    bool143 = True
    bool2 = True
    blah = False
    foo = True
    foobar2000 = False

    def as_list(self)
       ret = []
       for field in XXX:
           if getattr(self, field):
               ret.append(field)
       return ",".join(ret)

这应该会返回

代码语言:javascript
复制
>>> e = Example()
>>> e.as_list()
bool143, bool2, foo
EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-09-09 07:23:45

代码语言:javascript
复制
dir(obj)

为您提供对象的所有属性。您需要自己从方法等中过滤出成员:

代码语言:javascript
复制
class Example(object):
    bool143 = True
    bool2 = True
    blah = False
    foo = True
    foobar2000 = False

example = Example()
members = [attr for attr in dir(example) if not callable(getattr(example, attr)) and not attr.startswith("__")]
print members   

将为您提供:

代码语言:javascript
复制
['blah', 'bool143', 'bool2', 'foo', 'foobar2000']
票数 186
EN

Stack Overflow用户

发布于 2012-11-08 18:10:23

如果只想使用变量(不包括函数),请使用:

代码语言:javascript
复制
vars(your_object)
票数 141
EN

Stack Overflow用户

发布于 2009-12-21 18:14:48

@truppo:你的答案几乎是正确的,但callable总是会返回false,因为你只是传入了一个字符串。您需要的内容如下所示:

代码语言:javascript
复制
[attr for attr in dir(obj()) if not callable(getattr(obj(),attr)) and not attr.startswith("__")]

它将过滤掉函数

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1398022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档