如何查看类的实例变量

时间:2014-01-08 16:01:38

标签: python class variables instance

我的 init 功能中包含设置默认值列表。这些默认值都是实例变量。例如,

self.set_acqmode = 1
self.set_readmode = 4
self.set_triggermode = 0

我在这个类中有一个函数,我只想通过传递一个名字和一个值作为参数来改变这些默认设置。例如,

def change_setting(self, setting, *arg):

访问和更改正确的实例变量的pythonic方法是什么。我尝试使用 vars() dict 来查看这些变量,但前者只显示了类函数,后者需要引用类的实例(这还不存在,因为这是在课堂内)。

(如果有更好的方法可以在不搜索变量的情况下执行此操作,我仍然想知道如何查看它们,只是出于兴趣。)

4 个答案:

答案 0 :(得分:4)

使用setattr

def change_setting(self, setting, *arg):
    setattr(self, setting, arg)

答案 1 :(得分:1)

您当然可以使用__dict__

>>> class Test(object):
    def __init__(self):
        self.x = 1
    def set(self, attr, val):
        self.__dict__[attr] = val

>>> a = Test()
>>> a.set('x', 2)
>>> a.x
2

答案 2 :(得分:1)

setattr会奏效。但是你必须要问,如果你正在经历所有这些麻烦来重写setattr,你甚至会以正确的方式做到这一点吗?

如果你只想要一些任意的钥匙和值 - 嗯,这是一本字典,你应该这样使用它。如果您需要自定义行为,请覆盖__getitem__ / __setitem__

如果你真的需要属性,那么父函数就没有理由不做

myobj.set_triggermode = value

而不是过于复杂的

myobj.change_setting('triggermode', value)

所以你应该这样做。即使你出于某种原因想要这样做 - 使用kwargs而不是args,可能更接近你想要的。

答案 3 :(得分:0)

您可以在类的名称上使用__dict__,而无需实例化该类的对象。例如:

print myClass.__dict__.keys()

:: edit ::当然,如果你的编程很严格,你可以考虑使用__slots__,在这种情况下你将自己预先定义你班级的所有实例变量。