所有
一堂课:
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输出?或者有人知道让这堂课变得更简单的更好方法吗?
谢谢!
答案 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)