К какому модулю относятся __getitem__ и __len__? - PullRequest
0 голосов
/ 29 октября 2019

Пытаясь понять «магию» или специальные методы на 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__ в классе, который я реализую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...