如何正确地继承str?

时间:2013-07-12 10:59:15

标签: python inheritance unicode built-in

我被迫使用的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版本没有这样做。

1 个答案:

答案 0 :(得分:2)

正确的方法是解码到Unicode。 self.decode(some_encoding)

字节字符串可以是任何编码。如果始终使用ASCII,则将其用作编解码器:

return self.decode('ASCII')