我最近在集合中发现了抽象基类 (ABC),并且喜欢它们清晰、系统的方法和 Mixins。现在我也想创建自定义字符串 (*),但找不到字符串的 ABC。
有 UserString,但是 UserDict 却灰心了!?从 str 本身派生不会有 Mixins 吗?您将如何访问重写方法中字符串的“数据”部分?
我在某处看到了从 Sequence 和 Hashable 派生的建议,但后来我无法编写 if 'test' in my_string:
?!
您推荐哪种方法?
(*) 原因是: - 编写以内部定义方式排序的字符串 - 制作字符串(作为枚举的一部分),在与枚举范围外的值进行比较时抛出错误
最佳答案
这是史蒂文回答的一个愚蠢但快速的例子。它在 Python 3 中实现(即 Unicode 字符串、不带参数的 super
和 __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'
关于python - 字符串的 ABC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7172772/