免责声明:我使用Python 2.6有很多奇怪的原因。就是这样。
我试图让一个对象充当一个字符串,其属性如下:
class Setting(str):
def __new__(cls, value, source):
return super(Setting, cls).__new__(cls, value)
def __init__(self, value, source):
self.value = value
self.source = source
这很有效。太好了。 ;)
但是:我需要同时支持unicode和str对象。所以我最理想的是扩展基本字符串。不幸的是,可能出于完全逻辑的原因只是将超类更改为basetring不起作用并给出错误:
TypeError: The basestring type cannot be instantiated
任何人都知道如何解决这个问题?谢谢。 :)
答案 0 :(得分:1)
你不能使用basestring
,因为Python不会简单地允许它,它只是一个抽象的C类,只能在Python中用于{{1}或类似的电话。
在这种情况下,我建议使用通用方法,创建一个包含两个变量的类,并覆盖任何特殊运算符以获得所需的结果(即使其像str一样):
isinstance
然而,为了极端的python代码,我无法想到一个单一的用例(总会有更好的方法),这里有一个解决方法:
class Setting:
def __init__(self, value, source):
self.value = value
self.source = source
def __add__(self, rhs):
#keeping the object immutable
return Setting(self.value + rhs, self.source)
这个想法只是根据给定值的类型动态创建一个具有正确基类的类。