繁体   English   中英

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

[英]python serval variables combine into a dict?

所有,

一类:

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()太复杂了,那么我想将它们迁移到一个dict中,一次打印它们以进行调试和监视,但是,也许我不会想要丢失格式

foo.avar1 = 0

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

谢谢!

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

每个Python对象都有这样一个字典,它就是self.__dict__这打印self.__dict__其他Python dict好得多,但你可以使用Python标准库中的Data pretty打印机控制格式,循环遍历字典中的元素并打印但是你想要它们,如下所示:

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

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

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

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

相反,请尝试以下方法:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM