Python 令人困惑的论点
Python confusing arguments
有时 python 的动态类型系统让人难以理解为什么有些东西会起作用。例如:
- 为什么 pandas.read_sql() 接受并按预期 处理从 pymysql.connect() 返回的 pymysql.Connection 对象? 注意 pandas 文档中的任何地方都没有注意到接受了 pymysql.Connection 对象。
我正在寻找关于上述问题的一些说明和一些关于如何概括类似情况的建议。
read_sql
被记录为采用 Connectable
对象。严格来说,这意味着它将是 SqlAlchemy.engine.Connectable
或其子类的一个实例,但唯一重要的是它 表现 就像这样一个实例。粗略地说,您可以传递 "like" 和 Connectable
的任何内容,例如,tt 提供了一个 connect
方法,该方法采用与 sqlalchemy.engine.Connectable.connect
相同类型的参数。
换句话说,重要的不是确切的类型,而是您传递的类型的接口。 Python 将此称为 duck typing:如果一个对象看起来像鸭子并且行为像鸭子,那么它可以被需要鸭子的东西使用,即使它不是,其实是一只鸭子。
有时 python 的动态类型系统让人难以理解为什么有些东西会起作用。例如:
- 为什么 pandas.read_sql() 接受并按预期 处理从 pymysql.connect() 返回的 pymysql.Connection 对象? 注意 pandas 文档中的任何地方都没有注意到接受了 pymysql.Connection 对象。
我正在寻找关于上述问题的一些说明和一些关于如何概括类似情况的建议。
read_sql
被记录为采用 Connectable
对象。严格来说,这意味着它将是 SqlAlchemy.engine.Connectable
或其子类的一个实例,但唯一重要的是它 表现 就像这样一个实例。粗略地说,您可以传递 "like" 和 Connectable
的任何内容,例如,tt 提供了一个 connect
方法,该方法采用与 sqlalchemy.engine.Connectable.connect
相同类型的参数。
换句话说,重要的不是确切的类型,而是您传递的类型的接口。 Python 将此称为 duck typing:如果一个对象看起来像鸭子并且行为像鸭子,那么它可以被需要鸭子的东西使用,即使它不是,其实是一只鸭子。