【发布时间】:2015-07-08 11:45:28
【问题描述】:
我正在尝试在 python 中创建一个具有所有str 特征的类,但也是可变的。
例子:
>>> a = mutableString("My string")
>>> print a +"c"
"My stringc"
>>> a[0] = "a"
>>> a
"ay string"
从str继承怎么可能?
编辑: 到目前为止我所做的是:
class mutableString(object):
def __init__(self, string):
self.string = string
def __setitem__(self, item, value):
self.string = self.string[:item] + value + self.string[item + len(value):]
print type(self.string)
def __repr__(self):
return self.string
在这种情况下,我可以这样做:
a = mutableString("aaa")
a[2] = "b"
print a
#prints aab
但我做不到:
print a + "c"
#unsupported operand type(s) for +: 'mutableString' and 'str'
所以,我想做的是创建一个类,该类将保留 str 特征,但允许我设置项。
【问题讨论】:
-
str即使你从它继承,它仍然是不可变的。我认为从str继承不会对您有所帮助。 -
从列表继承并覆盖函数以使其更像字符串似乎是一种更好的方法。
-
你为什么要这样做?
-
你必须先了解mutable-immutable的概念。 This question 会帮助你一些。但基本上,可变对象使用它们的内存地址引用并在对象的值发生变化时更新该内存块上存储的对象。当一个不可变对象发生变化时,一个新的内存块被分配并更新结果存储在那里,对象开始使用新的内存块,放弃旧的。 字符串是不可变的,任何从 str 派生的类也是不可变的。
标签: python string class inheritance mutable