小编use*_*975的帖子

扩展Python的内置Str

我试图继承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)

python oop inheritance overriding immutability

16
推荐指数
3
解决办法
5257
查看次数

标签 统计

immutability ×1

inheritance ×1

oop ×1

overriding ×1

python ×1