6

我想要一个带有一个附加属性的字符串,让我们说是用红色还是绿色打印它。

Subclassing(str) 不起作用,因为它是不可变的。我看到了它的价值,但它可能很烦人。

多重继承有帮助吗?我从来没有用过那个。

仅继承对象并使用 self.value=str 意味着我必须自己实现所有字符串消息(如 strip)。

或者有没有办法转发它们,比如Ruby的missing_method?

我认为使用按实例索引的类级字典来存储颜色是可行的。太丑了?

4

5 回答 5

6

str 可以被继承,除非您使用的是非常旧的 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
于 2009-05-04T16:38:51.607 回答
2
import UserString
class mystr(UserString.MutableString):
   ...

通常最好使用不可变字符串及其子类,但如果您需要一个可变字符串,这是获得它的最简单方法。

于 2009-05-04T16:39:07.283 回答
1

也许包含字符串的自定义类会是更好的方法。您真的需要将所有字符串方法传递给底层字符串吗?为什么不通过属性公开字符串并允许类的消费者为所欲为呢?

于 2009-05-04T16:13:22.557 回答
0

您需要所有字符串的方法,因此扩展字符串并添加额外的详细信息。那么如果字符串是不可变的呢?也让你的类不可变。然后你无论如何都在创建新对象,这样你就不会意外地认为它是一个可变对象。

或者,如果 Python 有一个,扩展一个可变的字符串变体。我对 Python 不够熟悉,不知道是否存在这样的结构。

于 2009-05-04T16:17:39.223 回答
0

您可以尝试在PyPIstringlike中使用该模块。这是一个例子

于 2012-08-03T18:38:05.443 回答