說我被迫使用SQLObject的版本預計魔術__unicode__
上自定義字符串樣的類型,我想繼承格式的字符串,並滿足該要求:如何從str正確繼承?
class Foo(str):
extra_attribute = 42
def __repr__(self):
return repr(self) # optional
def __unicode__(self):
return unicode(self) # infinite recursion
return super(Foo, self).__unicode__() # str doesn't have __unicode__
return unicode(str(self)) # an ugly hack, but works
是最後一行我能做的最好的,還是有更清潔的方式?
轉換在Python 2.x中的Unicode狀物體顯然,正確的方法是這樣的:
return unicode(x)
,或者更冗長:
if hasattr(x, "__unicode__"):
return x.__unicode__()
else:
return unicode(x)
不幸的是,SQLObject的版本,我不得不使用沒有按不這樣做。
的正確方法是*解碼*爲Unicode。 'self.decode(some_encoding)'。 –
'sqlobject' *強制*繼承'str'嗎?我認爲子類化內置插件是應該儘可能避免的。 – Bakuriu
事實上,*子類化*應該避免,因爲它引入了緊密耦合。鴨子打字是避免這種情況的方法。 –