Python запутанные аргументы - PullRequest
       23

Python запутанные аргументы

0 голосов
/ 01 февраля 2020

Иногда Pythons Dynami c Система ввода сбивает с толку, чтобы понять, почему некоторые вещи работают. Например:

  • Почему pandas .read_ sql () принимает и работает как задумано для объекта py mysql .Connection, возвращаемого из py mysql .Подайте ()? Обратите внимание , что нигде в документации pandas они не отмечают, что объект py mysql .Connection принят.

Я ищу некоторые разъяснения по вышеуказанному вопросу и несколько советов о том, как обобщать в сходные ситуации.

1 Ответ

4 голосов
/ 01 февраля 2020

read_sql задокументировано как принимающий объект Connectable. Строго говоря, это означает, что это будет экземпляр SqlAlchemy.engine.Connectable или его подкласс, но важно только то, что он ведет себя как такой экземпляр. Грубо говоря, вы можете передать все, что «похоже» на Connectable, в том числе, например, tt предоставляет метод connect, который принимает те же типы аргументов, что и sqlalchemy.engine.Connectable.connect.

Другими словами важен не точный тип, а интерфейс к типу, который вы передаете. Python относится к этому как печать утки : если объект выглядит как утка и ведет себя как утка, он может использоваться чем-то, что требует утки, даже если это не утка.

...