Пытаясь понять «магию» или специальные методы на python и читая эту документацию , у меня сложилось впечатление, что любой объект будет иметь эти методы.
Если мы что-нибудь сделаемпросто как
class ClassicSpam:
pass
dir(ClassicSpam())
Я получаю что-то вроде:
['__class__',
'__delattr__',
'__dict__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__']
Я пытаюсь понять, как это работает, с точки зрения классов и наследования.
Что означает, что любой вызов, который выполняет этот контракт self[key]
, который мы "знаем" внутри, будет вызывать object.__getitem__(self, key)
Возможно, это не правильный подход, и я тоже думаю"java-like", но я хотел бы понять, чего мне не хватает и что происходит, когда я реализую __getitem__ в классе, который я реализую.