如何从继承字符串类型的新类中访问字符串值

2 投票
3 回答
1202 浏览
提问于 2025-04-15 19:20

我想定义一个新的类,这个类要继承内置的字符串类型(str),并且创建一个方法来复制字符串的内容。

我该怎么才能获取我新类对象中赋值的字符串呢?

    class str_usr(str):
        def __new__(cls, arg):
            return str.__new__(cls, arg)
        def dub(self):
            # How to modify the string value in self ?
            self.<attr> = self.<attr> + self.<attr>

谢谢大家的帮助 :-)

3 个回答

0

注意,在Python中,你可以直接对字符串使用乘法运算符:

>>> s = "foo"
>>> s*2
'foofoo'
2

看起来你并不想从 str 这个类继承(其实这几乎没什么用)。你可以创建一个新的类,并让它有一个属性是字符串,这样你就可以访问这个字符串了。

class MyString(object):
    def __init__(self, string):
        self.string = string

    def dup(self):
        self.string *= 2

另外,有几点需要注意:

  • 给你的类起名字时要用 CamelCaseCapitalization 的方式,这样大家能一眼看出这是个类。虽然 str 和一些内置类不这样命名,但大家自己定义的类一般都是这样。
  • 你通常不需要定义 __new__ 这个方法。定义 __init__ 方法就可以了。你现在定义的 __new__ 方法其实没什么特别的用处。
  • 如果你想给字符串添加新功能,可能不需要用类;你只需要定义一些处理字符串的函数就可以了。
4

在Python中,字符串是不可变的,也就是说一旦你创建了一个字符串,就不能改变它的值。这就像你有一个从 int 类派生出来的类,然后你想加一个方法来改变这个 int 的值,实际上是做不到的。

当然,你可以返回一个新的值:

class str_usr(str):
    def dup(self):
        return self + self # or 2 * self

s = str_usr("hi")
print s # prints hi
print s.dup() # print hihi

撰写回答