Python 3.0+collectionsпонятие
collections.UserString
обёртки типов
Обёртка над str с содержимым в атрибуте .data; удобна для создания собственных строковых классов наследованием.
Синтаксис
class MyStr(collections.UserString): ...
Отличие от наследования от str: у подкласса str методы upper(), strip() и срезы возвращают обычную строку, и ваш класс теряется после первой же операции, а UserString каждый раз пересобирает результат как self.__class__ из .data. Цена та же, что у остальных User*-обёрток: isinstance(s, str) даёт False и всё работает через лишний слой, поэтому наружу удобнее отдавать str(s).
Примеры
from collections import UserString
s = UserString('ab')
print(s.upper(), len(s)) # → AB 2
print(s.data, type(s.data).__name__) # → ab str
print(s == 'ab', isinstance(s, str)) # → True False
print(s + 'c', type(s + 'c').__name__) # → abc UserString
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности