首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中获取实例变量?

如何在Python中获取实例变量?
EN

Stack Overflow用户
提问于 2008-09-20 19:30:25
回答 11查看 175.2K关注 0票数 140

Python中有没有内置的方法来获取所有类的实例变量的数组?例如,如果我有这样的代码:

代码语言:javascript
复制
class hi:
  def __init__(self):
    self.ii = "foo"
    self.kk = "bar"

我有没有办法做到这一点:

代码语言:javascript
复制
>>> mystery_method(hi)
["ii", "kk"]

编辑:我最初错误地请求了类变量。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-09-20 19:34:17

每个对象都有一个__dict__变量,其中包含所有变量及其值。

尝尝这个

代码语言:javascript
复制
>>> hi_obj = hi()
>>> hi_obj.__dict__.keys()
票数 168
EN

Stack Overflow用户

发布于 2008-09-20 20:02:27

使用vars()

代码语言:javascript
复制
class Foo(object):
    def __init__(self):
        self.a = 1
        self.b = 2

vars(Foo()) #==> {'a': 1, 'b': 2}
vars(Foo()).keys() #==> ['a', 'b']
票数 118
EN

Stack Overflow用户

发布于 2008-09-20 19:38:01

通常情况下,您不能仅给定一个类就获得实例属性,至少在不实例化该类的情况下是不能的。但是,您可以在给定实例的情况下获取实例属性,或者在给定类的情况下获取类属性。请参阅“inspect”模块。您不能获得实例属性的列表,因为实例确实可以有任何属性,并且--如您的示例所示--创建它们的通常方法是在__init__方法中为它们赋值。

一个例外情况是,如果您的类使用插槽,它是类允许实例具有的固定属性列表。插槽在http://www.python.org/2.2.3/descrintro.html中有解释,但是插槽有各种陷阱;它们影响内存布局,因此多重继承可能是有问题的,并且继承通常也必须考虑插槽。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/109087

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档