私はコンストラクタが*kwargs
を受け入れ、それらを属性として設定するオブジェクトを持っています。Pythonリテラルでオブジェクトの文字列表現をPythonで作成します
>>> 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])
それ以上の入力の場合
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型の正しい文字列表現を取得する方法がありますか?多分標準ライブラリ関数ですか?
私は質問に目を通していませんが、私のocdはPythonやPythonの代わりにpythonically *を見るために私を殺しています。 – void
@s_vishnuありがとう、固定 – Euphe
ハハの仲間。私が解決策を試すのを待ちます。 – void