我试图继承str,但由于其不变性而遇到一些困难.
class DerivedClass(str):
def __new__(cls, string):
ob = super(DerivedClass, cls).__new__(cls, string)
return ob
def upper(self):
#overridden, new functionality. Return ob of type DerivedClass. Great.
caps = super(DerivedClass, self).upper()
return DerivedClass(caps + '123')
derived = DerivedClass('a')
print derived.upper() #'A123'
print type(derived.upper()) #<class '__main__.DerivedClass'>
print derived.lower() #'a'
print type(derived.lower()) #<type 'str'>
Run Code Online (Sandbox Code Playgroud)
对于不需要任何新功能的继承方法,例如derived.lower(),是否有一种简单的pythonic方法来返回类型的对象DerivedClass(而不是str)?或者我是否像我一样手动覆盖每个str.method()derived.upper()?
编辑:
#Any massive flaws in the following?
class DerivedClass(str):
def __new__(cls, string):
ob = super(DerivedClass, cls).__new__(cls, string)
return ob
def …Run Code Online (Sandbox Code Playgroud)