Arabirimi temsil eden bir özet taban sınıfım var. Bu sınıfın alt sınıfları, bu sınıfın diğer alt sınıflarının özellikleri olarak saklanır. Örneğinİç içe geçmiş sınıf örnekleri için yararlı varsayılan __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
hiyerarşi derinliği ve düzen önceden bilinemez, ama özyinelemeli olmayacaktır.
__repr__
ürününü AbstractBase
numaralı telefona ne koyabilirim ki, her bir alt sınıfın önerilerini yararlı bir şekilde görmeme izin verecek?
Benim şu anki yaklaşımdır:
MyClass
{'var1': 1,
'var2': 2}
Ancak sınıflar için AbstractBase
ile: AbstractBase
alt sınıfları olan hiçbir özelliklere sahip
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})
(bu okunabilir bir şey, örneğin çıkışı alt sınıflar kırılır, çünkü bir ana sınıfın nerede başladığını ve bir başka sona erdiğini söylemek zordur (yukarıdaki __repr__
tarafından daha fazla girintileme yapılmadığı göz önüne alınırsa)
Ben cls1
ve cls2
tek int özelliği var
vardı hayal aşağıda gibi bir şeyle mutlu olurum: Ne yazık ki
Child
{'cls1': {
'var': 1,
},
'cls2': {
'var': 0,
}
}
, bunu başarmak için nasıl biliyor (ya da hatta mümkünse) yok . Düşüncesi olan var mı?
Sen gibi bir şey istemek' def __repr __ (self, girinti = 1) ', bazı garip köşe olacak –