2013-08-09 3 views
0

Я хочу дать класс, я сделал все методы, что строка имеет (replace, isupper и т.д.) Ниже несколько примеров кода:Как наследовать от встроенного?

>>> class MyClass(str): 
...  def __init__(self, string): 
...   self.string = string 
...  def __str__(self): 
...   return self.string 
... 
>>> MyClass("aaa").replace("a", "$") 
'$$$' 
>>> 

Это работает точно так, как я хочу его. Тем не менее, я немного смущен тем, как я должен унаследовать от str. Я могу сделать, как я сделал выше, или:

class MyClass(__builtins__.str): 
    ... 

или даже:

import types 
class MyClass(types.__builtins__["str"]): 

Подвела, мой вопрос: что это лучший способ, чтобы наследовать от str (или любой другой встроенный в этом отношении)? Я дал это или есть еще лучший способ, о котором я не думаю.

Спасибо.

+2

Вы должны, как правило, не относиться к '__builtins__'. Просто используйте 'str' напрямую. Но есть ли здесь настоящая проблема? –

+0

@MartijnPieters - Нет, нет ничего плохого в использовании 'str' напрямую. Я просто хотел уточнить, что лучше всего унаследовать от встроенного. Поскольку есть несколько способов сделать то, что я хочу, мне нравится выбирать лучшее. – iCodez

ответ

1

Никогда не прикасайтесь к __builtins__. Это деталь реализации. Цитирование документов для смешения аналогичного названия __builtin__ модуля:

CPython деталь реализации: Большинство модулей имеют название __builtins__ (обратите внимание на «S») доступно как часть их глобал. Значение __builtins__ обычно является либо этим модулем, либо значением этого атрибута dict. Поскольку это деталь реализации, она не может использоваться альтернативными реализациями Python.

Просто наследуйте от str. Нет причин не делать этого; это не быстрее или яснее или что-то использовать для этого другое имя.

+0

Прохладный. Вот что я подумал. Просто хотел убедиться. – iCodez

1
class MyClass(str): 

Просто отлично. Я не думаю, что есть проблема с этим. Почему вы хотите обременять себя, используя builtin и все ...

Смежные вопросы