ABC for String?

Ger*_*nuk 5 python string abstract-class abc

我最近在集合中发现了抽象基类(ABCs),就像它们清晰,系统的方法和Mixins一样.现在我也想创建海关字符串(*),但我找不到字符串的ABC.

有UserString,但不鼓励UserDict!?从str本身派生没有Mixins?如何在重写方法中访问字符串的"数据"部分?

在某个地方,我看到了从Sequence和Hashable派生的建议,但后来我写不出来了if 'test' in my_string:?!

你推荐哪种方法?

(*)原因是: - 以内部定义的方式编写顺序的字符串 - make string(作为枚举的一部分),在与枚举范围之外的值进行比较时抛出错误

Ery*_*Sun 4

这是史蒂文回答的一个愚蠢但快速的例子。它在 Python 3 中实现(即,super不带参数的 Unicode 字符串和__getitem__切片):

class MultiStr(str):
    def __new__(cls, string, multiplier=1, **kwds):
        self = super().__new__(cls, string, **kwds)
        self.multiplier = multiplier
        return self

    def __getitem__(self, index):
        item = super().__getitem__(index)
        return item * self.multiplier

>>> s = MultiStr(b'spam', multiplier=3, encoding='ascii')
>>> s[0]
'sss'
>>> s[:2]
'spspsp'
>>> s[:]
'spamspamspam'
Run Code Online (Sandbox Code Playgroud)

  • @Gerenuk 有点晚了,但是:它不起作用,因为 `str` 继承的 `__new__` 方法不知道附加的 `multiplier` kw 参数 - 当它收到参数时,它不知道要做什么用它来做。所以你必须自己处理。 (2认同)