我想要一个带有一个额外属性的字符串,让我们说是否以红色或绿色打印它。如何在我的课堂上提高字符串的性能?
子类化(str)不起作用,因为它是不可变的。我看到了价值,但它可能令人讨厌。
多重继承有帮助吗?我从来没有使用过。
继承对象并使用self.value = str意味着我必须自己实现所有字符串消息(如strip)。
还是有办法转发他们,像Ruby的missing_method?
我认为使用实例索引的类级字典存储颜色可以工作。太丑了?
我想要一个带有一个额外属性的字符串,让我们说是否以红色或绿色打印它。如何在我的课堂上提高字符串的性能?
子类化(str)不起作用,因为它是不可变的。我看到了价值,但它可能令人讨厌。
多重继承有帮助吗?我从来没有使用过。
继承对象并使用self.value = str意味着我必须自己实现所有字符串消息(如strip)。
还是有办法转发他们,像Ruby的missing_method?
我认为使用实例索引的类级字典存储颜色可以工作。太丑了?
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
也许一个自定义类包含一个字符串将是一个更好的方法。你真的需要将所有字符串方法传递给底层字符串吗?为什么不通过属性暴露字符串,并允许该类的消费者做任何他们想做的事情?
你需要所有字符串的方法,所以扩展字符串并添加额外的细节。那么如果字符串是不可变的呢?让你的课也不变。然后,无论如何你都在创建新的对象,所以你不会意外地认为它是一个可变的对象。或者,如果Python有一个,则扩展一个可变的字符串变体。我对Python不熟悉,不知道这样的结构是否存在。
import UserString
class mystr(UserString.MutableString):
...
一般来说,最好使用一成不变的字符串其&子类,但如果你需要一个可变的一个本是获取它的最简单方法。
您可以尝试使用PyPI中的stringlike
模块。这里是an example。
这很好。但是你需要小心这种方法。如果你做了任何字符串操作(如title(),+,...),结果将是str而不是A. – 2009-05-04 16:59:17
我的印象是,这不会起作用,因此是一个问题。原来,这是我的__new__中的一个程序错误,我误解了Python的不足信息。 – Tobias 2009-05-04 21:57:56