如何获取Python中的实例变量?
在Python中,有没有什么内置的方法可以获取一个类的所有实例变量的数组?比如说,如果我有下面这段代码:
class hi:
def __init__(self):
self.ii = "foo"
self.kk = "bar"
有没有办法让我做到这个:
>>> mystery_method(hi)
["ii", "kk"]
补充说明:我最开始错误地问了类变量的问题。
12 个回答
19
通常情况下,你不能仅仅通过一个类来获取实例的属性,至少不可以在不创建这个类的实例的情况下。不过,如果你有一个实例,就可以获取它的属性;如果你有一个类,也可以获取它的类属性。你可以看看' inspect'模块。之所以不能获取实例属性的列表,是因为实例的属性可以是任何东西,而在你的例子中,通常创建这些属性的方法就是在__init__方法中直接赋值。
有一个例外,就是如果你的类使用了“slots”,这是一种固定的属性列表,类允许实例拥有这些属性。关于slots的详细信息可以在http://www.python.org/2.2.3/descrintro.html找到,但使用slots也有一些陷阱;它们会影响内存的布局,所以多重继承可能会有问题,而且继承时也必须考虑到slots。
131
使用 vars() 这个函数
class Foo(object):
def __init__(self):
self.a = 1
self.b = 2
vars(Foo()) #==> {'a': 1, 'b': 2}
vars(Foo()).keys() #==> ['a', 'b']
194
每个对象都有一个叫做 __dict__
的变量,这个变量里面存放着这个对象所有的属性和它们的值。
你可以试试这个
>>> hi_obj = hi()
>>> hi_obj.__dict__.keys()
输出结果是
dict_keys(['ii', 'kk'])