我被迫使用的sqlobject版本在自定义字符串类型上需要魔术__unicode__
,我正在尝试继承表单字符串并满足该要求:
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版本没有这样做。
答案 0 :(得分:2)
正确的方法是解码到Unicode。 self.decode(some_encoding)
。
字节字符串可以是任何编码。如果始终使用ASCII,则将其用作编解码器:
return self.decode('ASCII')