Что такое "_ipython_canary_method_should_not_exist_"? - PullRequest
1 голос
/ 10 мая 2019

Я реализовал свой собственный __getattr__(), чтобы свободно обрабатывать любые несуществующие атрибуты.

Мне просто удалось определить этот класс в блокноте Jupyter, чтобы поэкспериментировать с ним.

IPython создает _ipython_canary_method_should_not_exist_ из-за этой __getattr__ реализации - и Я бы хотел понять, что это такое и как "очистить" это возможно.

Существует этот вопрос , открытый по этому поводу, но я не понимаю, почему - если он проверяет разрешительную обработку в __getattr__ - он не проверяет, чтобы увидеть _repr_html_ реализован в примере ОП?

from types import SimpleNamespace

class Metabox(SimpleNamespace):

    def __getattr__(self, name):
        """
        Create a new namespace for any non-existing attributes.
        """
        print("calling __getattr__")
        self.__dict__[name] = Metabox()
        return self.__dict__[name]

1 Ответ

1 голос
/ 27 мая 2019

Как конус, упомянутый в комментариях выше; Иногда IPython необходимо проверять объекты, чтобы узнать, есть ли у них какие-либо методы.

Для обработки объекта, как ваш; который всегда говорит «да», когда у нас есть сомнения, мы исследуем это имя; и если объект говорит "да, я понял!" мы знаем объект лжи и реализовали __getattr__.

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