如何为我的类赋予字符串特性?

6 投票
5 回答
1707 浏览
提问于 2025-04-15 11:24

我想要一个字符串,并且想给它加一个额外的属性,比如说决定它是红色还是绿色显示。

直接继承字符串(str)不行,因为字符串是不可变的。这点我明白,但有时候确实让人觉得麻烦。

那多重继承能帮上忙吗?我之前没用过这个。

如果只继承对象,并且用self.value=str,那我就得自己实现所有和字符串相关的功能(比如去掉空格)了。

或者有没有办法像Ruby里的missing_method那样转发这些功能呢?

我觉得可以用一个类级别的字典,按照实例来存储颜色,这样可以吗?会不会太丑了?

5 个回答

1

也许创建一个自定义类,里面包含一个字符串会更好。你真的需要把所有字符串的方法都传递给底层的字符串吗?为什么不通过一个属性来公开这个字符串,让使用这个类的人可以随意操作它呢?

2
import UserString
class mystr(UserString.MutableString):
   ...

通常来说,最好使用不可变字符串和它的子类,但如果你需要一个可变的字符串,这就是最简单的方法。

6

在很老的Python版本中,字符串是不能被继承的,除非你使用的是非常老的版本,比如:

>>> class A(str):
...    def __new__(cls, color, *args, **kwargs):
...        newobj = str.__new__(cls, *args, **kwargs)
...        newobj.color = color
...        return newobj
>>> a = A("#fff", "horse")
>>> a.color
'#fff'
>>> a
'horse'
>>> a.startswith("h")
True

撰写回答