您可以嘗試使用,作爲首發:
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