我有一个对象,它的构造函数接受*kwargs
,并将它们设置为属性。你知道吗
class Observable(object):
def __init__(self, **kwargs):
for key in kwargs.keys():
setattr(self, key, kwargs[key])
我希望print用以下方式表示对象:
>>> obs = Observable(foo=1, bar=5, _bazz=12, name='Amok', props=('One', 'two'))
>>> print(x)
Observable(bar=5, foo=1, name='Amok', props=('One', 'two'))
我试图添加一个自定义__repr__
:
class Observable(object):
def __init__(self, **kwargs):
for key in kwargs.keys():
setattr(self, key, kwargs[key])
def __repr__(self):
atribs = [(atrib, self.__dict__[atrib]) for atrib in self.__dict__.keys() if not '_' == atrib[0]]
atrib_strs = []
for atrib, val in atribs:
atrib_strs.append('{}={}'.format(atrib, val))
out_str = '{}({})'.format(self.__class__.__name__, ', '.join(atrib_strs))
return out_str
对于上面的输入,它打印:
Observable(foo=1, bar=5, name=Amok, props=('One', 'two'))
我担心的是我有Amok
而不是'Amok'
。
我可以为字符串添加类型检查,但也许有一种方法可以获得任何python类型的正确字符串表示形式?也许是一个标准的库函数?你知道吗
实现这一点的简单方法是通过
repr()
调用每个属性的值__repr__()
。这样,每个字符串表示都是 保证显示。你知道吗相关问题 更多 >
编程相关推荐