如何获取Python中的实例变量?

155 投票
12 回答
212324 浏览
提问于 2025-04-11 09:19

在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'])

撰写回答