[英]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.