Наследование встроенных типов очень редко стоит. Вам приходится иметь дело с несколькими вопросами, и вы не получаете особой выгоды.
Почти всегда лучше использовать композицию. Вместо того, чтобы наследовать str
, вы бы сохранили объект str
в качестве атрибута.
class EnhancedString(object):
def __init__(self, *args, **kwargs):
self.s = str(*args, **kwargs)
вы можете отложить любые методы, которые вы хотите работать с базовым str
self.s
, вручную или автоматически, используя __getattr__
.
Это, как говорится, необходимость вашего собственного строкового типа - это то, что должно дать вам паузу. Есть много классов, которые должны хранить строку как свои основные данные, но вы обычно хотите использовать str
или unicode
(последний, если вы представляете текст) для общего представления строк. (Одним из распространенных исключений является необходимость использования строкового типа набора инструментов пользовательского интерфейса.) Если вы хотите добавить функциональность в свои строки, попробуйте, если можете, использовать функции, которые работают со строками вместо новые объекты, служащие строками , что делает ваш код проще и более совместимым со всеми остальными программами.