python serval变量组合成一个字典?

时间:2010-10-20 11:47:23

标签: python variables dictionary

所有

一堂课:

class foo():
    def __init__(self):
        self.avar1 = 0
        self.bvar2 = 1
        self.cvar3 = 3
    def debug_info(self):
        print "avar1:" avar1
        print "bvar2:" bvar2
        print "cvar3:" cvar3

我的问题是,如果我有很多self.vars,那么编写debug_info()太复杂了 ,然后我想将它们迁移到一个字典中,一次打印它们用于调试和监视目的,但是,也许我不想丢失格式

foo.avar1 = 0

访问类内的变量,因为它易于阅读,易于使用和修改。你有更好的想法,而不是访问类。 dict 的debug_info输出?或者有人知道让这堂课变得更简单的更好方法吗?

谢谢!

5 个答案:

答案 0 :(得分:3)

def debug_info ( self ):
    for ( key, value ) in self.__dict__.items():
        print( key, '=', value )

答案 1 :(得分:2)

每个Python对象都有这样一个字典,它是self.__dict__ 这打印得和其他Python字典相似,但你可以使用Data pretty printer来控制格式循环遍历字典中元素的Python标准库,然后根据需要打印它们,如下所示:

class foo():
    def __init__(self):
        self.avar1 = 0
        self.bvar2 = 1
        self.cvar3 = 3
    def debug_info(self):
        for k in self.__dict__:
            print k + ':' + str(self.__dict__[k])


>>> foo().debug_info()
bvar2:1
cvar3:3
avar1:0

答案 2 :(得分:1)

模块,类和实例都有__dict__,因此您可以在希望显示调试的实例上引用它:

>>> f = foo()
>>> f.__dict__
{'bvar2': 1, 'cvar3': 3, 'avar1': 0}

答案 3 :(得分:1)

虽然在大多数情况下使用__dict__会有效,但它并不总是有效 - 特别是对于__slots__变量的对象。

相反,请尝试以下方法:

vars = [var for var in dir(obj) if not callable(getattr(obj, var)) and not var.startswith('__')]

答案 4 :(得分:1)

其他人已经回答了有关打印的问题。如果您在__init__方法中设置了很多变量,则还可以使用__dict__来缩短变量。如果你有很多变量,这至少可以让你不必一直输入self。我认为标准方式在大多数情况下更具可读性,但您的里程可能会有所不同。

def __init__(self):
    vars = dict(avar1=0, bvar2=1, cvar3=3)
    self.__dict__.update(vars)