在Python中获取类中所有变量的值。
在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
问题的出现原因是需要获取一个类中所有变量的值,但是在给出的内容中,存在一些混淆和错误的信息。
解决方法是使用vars(your_object)
来获取类中的实例变量。这个方法可以返回一个字典,包含了实例变量的名称和值。但是需要注意的是,这个方法只能获取实例变量,不能获取类变量。
要获取类变量,可以使用vars(THECLASSITSELF)
在类本身上使用vars
方法。这样可以获取到类的变量字典。
另外,还可以使用ClassName.__dict__["__doc__"]
来获取类的变量。这个方法可以过滤掉函数和内置变量,只返回所需的字段。
通过以上方法,可以简洁地获取到类中所有变量的值。这对于需要在网络上发送状态之前进行序列化的场景非常有用。
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类中所有变量值的方法。