Я бы хотел изменить поведение отображения списка Python, чтобы вместо создания list
они создавали подкласс list
, который я написал. (Примечание: Я не думаю, что это хорошая идея, я делаю это для удовольствия, а не фактическое использование.)Могу ли я переопределить отображение списка Python?
Вот что я сделал:
old_list = list
class CallableList(old_list):
def __init__(self, *args):
old_list.__init__(self)
for arg in args:
self.append(arg)
def __call__(self, start, end=None):
if end:
return self[start:end]
return self[start]
list = CallableList
После того, как это сделано, это возвращает третий элемент списка:
x = list(1, 2, 3)
print x(2)
, но это по-прежнему выдает ошибку:
x = [1, 2, 3]
print x(2)
ошибка довольно проста :
Traceback (most recent call last):
File "list_test.py", line 23, in <module>
print x(2)
TypeError: 'list' object is not callable
Я думаю, что, вероятно, нет способа сделать это, но я не могу найти ничего, что бы говорило так окончательно. Есть идеи?
Вам не нужно переопределять конструктор вообще, потому что вы не меняете способ создания списка, вы просто добавляете метод. – aaronasterling
@AaronMcSmooth: вы не можете добавлять методы к типам, определенным на C, например, к встроенному «списку». –
Не '__init__' должен возвращать новый объект? – badp