Python对象究竟是如何被千变万化地调用的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4209个文字,预计阅读时间需要17分钟。
创建对象的主要方法有两种:一种是通过Python/C++ API,另一种是通过调用类型对象。对于内置类型的实例对象,这两种方式都是支持的,例如列表。
楔子
我们了解到,创建对象的主要方法有两种:一种是通过Python/C API,而另一种则是通过调用类型对象。对于内置类型的实例对象而言,这两种方式都是支持的,比如列表,我们即可以通过[]创建,也可以通过list(),前者是Python/C API,后者是调用类型对象。
创建自定义类的实例对象只能通过调用该类的类型对象。如果一个对象可以进行调用,那么该对象就是可调用的,否则不可调用。
一个对象是否可调用取决于其对应的类型对象是否定义了特定的方法。如果从 Python 的角度看的话,这个方法就是 __call__,从解释器角度看的话,这个方法就是 tp_call。
调用 int、str、tuple 可以创建一个整数、字符串、元组,调用自定义的类也可以创建出相应的实例对象,说明类型对象是可调用的,也就是callable。那么这些类型对象(int、str、tuple、class等等)的类型对象(type)内部一定有 __call__ 方法。
本文共计4209个文字,预计阅读时间需要17分钟。
创建对象的主要方法有两种:一种是通过Python/C++ API,另一种是通过调用类型对象。对于内置类型的实例对象,这两种方式都是支持的,例如列表。
楔子
我们了解到,创建对象的主要方法有两种:一种是通过Python/C API,而另一种则是通过调用类型对象。对于内置类型的实例对象而言,这两种方式都是支持的,比如列表,我们即可以通过[]创建,也可以通过list(),前者是Python/C API,后者是调用类型对象。
创建自定义类的实例对象只能通过调用该类的类型对象。如果一个对象可以进行调用,那么该对象就是可调用的,否则不可调用。
一个对象是否可调用取决于其对应的类型对象是否定义了特定的方法。如果从 Python 的角度看的话,这个方法就是 __call__,从解释器角度看的话,这个方法就是 tp_call。
调用 int、str、tuple 可以创建一个整数、字符串、元组,调用自定义的类也可以创建出相应的实例对象,说明类型对象是可调用的,也就是callable。那么这些类型对象(int、str、tuple、class等等)的类型对象(type)内部一定有 __call__ 方法。

