如何为我的类赋予字符串特性?
我想要一个字符串,并且想给它加一个额外的属性,比如说决定它是红色还是绿色显示。
直接继承字符串(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