Python中有没有内置的方法来获取所有类的实例变量的数组?例如,如果我有这样的代码:
class hi:
def __init__(self):
self.ii = "foo"
self.kk = "bar"我有没有办法做到这一点:
>>> mystery_method(hi)
["ii", "kk"]编辑:我最初错误地请求了类变量。
发布于 2008-09-20 19:34:17
每个对象都有一个__dict__变量,其中包含所有变量及其值。
尝尝这个
>>> hi_obj = hi()
>>> hi_obj.__dict__.keys()发布于 2008-09-20 20:02:27
使用vars()
class Foo(object):
def __init__(self):
self.a = 1
self.b = 2
vars(Foo()) #==> {'a': 1, 'b': 2}
vars(Foo()).keys() #==> ['a', 'b']发布于 2008-09-20 19:38:01
通常情况下,您不能仅给定一个类就获得实例属性,至少在不实例化该类的情况下是不能的。但是,您可以在给定实例的情况下获取实例属性,或者在给定类的情况下获取类属性。请参阅“inspect”模块。您不能获得实例属性的列表,因为实例确实可以有任何属性,并且--如您的示例所示--创建它们的通常方法是在__init__方法中为它们赋值。
一个例外情况是,如果您的类使用插槽,它是类允许实例具有的固定属性列表。插槽在http://www.python.org/2.2.3/descrintro.html中有解释,但是插槽有各种陷阱;它们影响内存布局,因此多重继承可能是有问题的,并且继承通常也必须考虑插槽。
https://stackoverflow.com/questions/109087
复制相似问题