您可以尝试使用,作为首发:
class Mine(unicode):
#
def __init__(self, *args, **kwargs):
super(Mine, self).__init__(*args, **kwargs)
#
def __setattr__(self, attr, value):
try:
super(Mine, self).__setattr__(attr, value)
except AttributeError:
self.__dict__[attr] = value
#
def __getattr__(self, attr):
try:
super(Mine, self).__getattr__(attr)
except AttributeError:
try:
return self.__dict__[attr]
except KeyError:
raise AttributeError
def __getitem__(self, item):
obj = Mine(super(Mine, self).__getitem__(item))
obj.__dict__ = self.__dict__
return obj
当然,你必须创建一个特定split
方法,其中,输出列表中的每个项目将是一个Mine
对象:
def split(self, arg=' '):
result = []
for item in super(Mine, self).split(arg):
i = Mine(item)
i.__dict__ = self.__dict__
result.append(i)
return result
一般的想法是重载每父类的单一方法(至少,你真正感兴趣的),以便它返回你的类的一个实例并继承__dict__
的来电者...这可以是很多工作。
你必须重载任何方法 - Mine('a')+'a'会给你'aa'而不是Mine('aa')否则等 – lolopop
@pythonm我们非常同意,这是很多工作。 –
感谢您的答案!这不是一件容易的事。 – wodow