在Python中获取类中所有变量的值。

18 浏览
0 Comments

在Python中获取类中所有变量的值。

如何获取一个可迭代的类中所有变量的列表?类似于locals()函数,但是用于类。

class Example(object):
    bool143 = True
    bool2 = True
    blah = False
    foo = True
    foobar2000 = False
    def as_list(self):
        ret = []
        for field in dir(self):
            if not field.startswith("__") and not callable(getattr(self, field)):
                ret.append(field)
        return ",".join(ret)

这将返回:

>>> e = Example()
>>> e.as_list()
bool143, bool2, foo

0
0 Comments

问题的出现原因是需要获取一个类中所有变量的值,但是在给出的内容中,存在一些混淆和错误的信息。

解决方法是使用vars(your_object)来获取类中的实例变量。这个方法可以返回一个字典,包含了实例变量的名称和值。但是需要注意的是,这个方法只能获取实例变量,不能获取类变量。

要获取类变量,可以使用vars(THECLASSITSELF)在类本身上使用vars方法。这样可以获取到类的变量字典。

另外,还可以使用ClassName.__dict__["__doc__"]来获取类的变量。这个方法可以过滤掉函数和内置变量,只返回所需的字段。

通过以上方法,可以简洁地获取到类中所有变量的值。这对于需要在网络上发送状态之前进行序列化的场景非常有用。

参考链接:stackoverflow.com/a/193539/1896134

0
0 Comments

Python中如何获取类中所有变量的值

在Python中,我们可以使用dir(obj)来获取对象的所有属性。但是,这其中会包含方法等其他成员,我们需要自己对其进行过滤。下面是一个示例:

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

上述代码的输出结果为:

['blah', 'bool143', 'bool2', 'foo', 'foobar2000']

但是,为什么要实例化一个对象来使用dir(Example()),而不是直接使用类类型dir(Example)呢?我猜测是因为提问者想要获取实例变量(可能在类中不存在)。

那么,如何获取变量的值呢?可以使用getattr(object, attr)来获取。

还有一个问题是,callable(attr)是如何工作的呢?attr不是一个字符串吗?实际上,你应该使用vars(Example).items()或vars(instance.__class__).items()来代替dir(),因为dir()只会返回字符串作为名称。

所以,这里建议更新回答,具体原因可以参考下面的回答。

另外,如果你只想获取字段而不包括函数、内置变量等,请使用ClassName.__dict__["__doc__"]。但是需要注意,这种方法不能保证一定包含内容,它只包含类顶部的文档字符串。如果想要查看所有实例级别的属性(包括那些没有在类本身中定义但添加到实例中的属性),可以检查instance.__dict__。但是,如果类定义为使用__slots__,并且没有将__dict__添加为其中之一,那么它将返回AttributeError。

以上就是获取Python类中所有变量值的方法。

0
0 Comments

问题的出现原因:用户想要获取一个类中所有变量的值,但是他尝试使用了错误的方法,导致无法得到正确的结果。

解决方法:用户可以使用以下代码来获取类中所有变量的值:

[attr for attr in dir(obj()) if not callable(getattr(obj(),attr)) and not attr.startswith("__")]

这段代码将过滤掉函数,只保留变量。

另外,用户还可以使用以下代码来获取类中的字段:

ClassName.__dict__["__doc__"]

这段代码将过滤掉函数、内置变量等,并且只返回需要的字段。

0