私は、インターフェイスを表す抽象基本クラスを持っています。このクラスのサブクラスは、このクラスの他のサブクラスとしてプロパティとして格納されます。例えばネストされたクラスインスタンスに便利なデフォルトの__repr__
:
class AbstractBase(object):
pass
class Child(AbstractBase):
def __init__(self, cls1, cls2):
assert isinstance(cls1, AbstractBase)
assert isinstance(cls2, AbstractBase) # just to show they're instances
self.cls1 = cls1
self.cls2 = cls2
階層の深さとレイアウトを事前に知ることはできないが、再帰的ではありません。
__repr__
をAbstractBase
に入れれば、どのようにして各子クラスの特色を役立てることができますか?
私の現在のアプローチがある:AbstractBase
を持つクラスのために、しかし
MyClass
{'var1': 1,
'var2': 2}
:基本クラスの
from pprint import pformat
class AbstractBase(object):
def __repr__(self):
return self.__class__.__name__ + '\n' \
+ pformat({k:v for k,v in self.__dict__.iteritems()
if not '__' in k})
(AbstractBase
のサブクラスですがない性質で、これは例えば、読みやすい何かを出力します親クラスがどこで開始し、どこで終わるかを知るのは難しいので、サブクラスは破棄されます(上記の__repr__
によってさらにネスティングのレベルがインデントされていない場合)
私は、単一のintプロパティvar
たcls1
とcls2
を想像し、以下のようなものと幸せになるだろう:悲しいこと
Child
{'cls1': {
'var': 1,
},
'cls2': {
'var': 0,
}
}
を、私はこれを達成する方法がわからない(あるいはそれも可能だ場合) 。何かご意見は?
あなたがあなた自身のものをロールバックする必要がありますので、 'pformat'とそれを組み合わせるする方法はおそらくありません、といくつかの奇妙なコーナーがあるでしょうけれどもあなたは、'デフ__repr __(自己、インデント= 1) 'のような何かをしたいですあなたがカバーすることができない場合 –