我知道如何用以下命令重写string类:
class UserString:
def __str__(self):
return 'Overridden String'
if __name__ == '__main__':
print UserString()
但是,在没有隐式定义UserString
类的情况下,如何使用这个类来代替内置的str
类呢?需要说明的是,我想要:
>>> print "Boo boo!"
Overridden String
发布于 2014-01-02 22:41:14
如果不破解python可执行文件本身,就不可能做你想做的事情……毕竟,str
是一种内置类型,当传递'string'
类型时,解释器将立即创建内置字符串。
然而..。使用委托,可以做这样的事情。这是对另一个堆栈溢出配方的稍微修改(遗憾的是,我没有在代码中包含指向它的链接……),所以如果这是您的代码,请随意声明:)
def returnthisclassfrom(specials):
specialnames = ['__%s__' % s for s in specials.split()]
def wrapit(cls, method):
return lambda *a: cls(method(*a))
def dowrap(cls):
for n in specialnames:
method = getattr(cls, n)
setattr(cls, n, wrapit(cls, method))
return cls
return dowrap
然后像这样使用它:
@returnthisclassfrom('add mul mod')
class UserString(str):
pass
In [11]: first = UserString('first')
In [12]: print first
first
In [13]: type(first)
Out[13]: __main__.UserString
In [14]: second = first + 'second'
In [15]: print second
firstsecond
In [16]: type(second)
Out[16]: __main__.UserString
这样做的一个缺点是str
不支持radd
,因此'string1' + UserString('string2')
将提供一个字符串,而UserString('string1') + 'string2'
将提供一个UserString。我不确定有没有办法解决这个问题。
也许没有帮助,但希望它能让你走上正确的道路。
https://stackoverflow.com/questions/20884949
复制相似问题