12. Other Built-in Types
解释器支持其他几种对象。其中大多数只支持一两个操作。
12.1。模块
模块上唯一的特殊操作是属性访问:m.name,其中m是模块,名称访问m的符号表中定义的名称。模块属性可以分配给。(请注意,该import语句严格来说不是对模块对象的操作; import foo不需要名为foo的模块对象存在,而是需要某个名为foo的模块的(外部)定义。)
每个模块的特殊属性是__dict__。这是包含模块符号表的字典。修改这个字典实际上会改变模块的符号表,但直接赋值给__dict__属性是不可能的(你可以写m.__dict__['a'] = 1,定义m.a为1,但不能写m.__dict__ = {})。__dict__不建议直接修改。
内置在解释器中的模块是这样写的:
12.2。类和类实例
请参阅对象,值和类型以及这些类的定义。
12.3。功能
函数对象由函数定义创建。函数对象的唯一操作是调用它:func(argument-list)。
实际上有两种功能对象:内置函数和用户定义函数。两者都支持相同的操作(来调用函数),但实现是不同的,因此不同的对象类型。
有关更多信息,请参阅函数定义
12.4。方法
方法是使用属性表示法调用的函数。有两种风格:内置方法(如append()列表)和类实例方法。内置方法用支持它们的类型来描述。
该实现为类实例方法添加了两个特殊的只读属性:m.im_self方法运行的对象,以及m.im_func实现该方法的函数。callingm(arg-1, arg-2, ..., arg-n)与calling完全等同m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)。
类实例方法是绑定或非绑定的,分别指的是该方法是通过实例还是类来访问。当一个方法被解除绑定时,它的im_self属性将被None调用,并且如果被调用,则self必须将一个显式对象作为第一个参数传递。在这种情况下,self必须是未绑定方法的类(或该类的子类)的实例,否则TypeError会引发a。
和函数对象一样,方法对象也支持获取任意属性。但是,由于方法属性实际上存储在底层函数对象(meth.im_func)中,因此禁止在绑定或未绑定方法上设置方法属性。尝试在方法上设置属性会导致AttributeError引发。为了设置一个方法属性,你需要在底层函数对象上明确地设置它:
>>> class C:
... def method(self):
... pass
...
>>> c = C()
>>> c.method.whoami = 'my name is method' # can't set on the method
Traceback (most recent call last):
File "
AttributeError: 'instancemethod' object has no attribute 'whoami'
>>> c.method.im_func.whoami = 'my name is method'
>>> c.method.whoami
'my name is method'
复制
有关更多信息,请参阅标准类型层次结构
12.5。代码对象
代码对象被实现用来表示“伪编译”的可执行Python代码,如函数体。它们不同于函数对象,因为它们不包含对其全局执行环境的引用。代码对象由内置compile()函数返回,并可以通过函数对象的func_code属性提取。另请参阅code模块。
通过将代码对象(而不是源字符串)传递给exec语句或内置eval()函数,可以执行或评估代码对象。
有关更多信息,请参阅标准类型层次结构
12.6。键入对象
类型对象表示各种对象类型。对象的类型由内置函数访问type()。类型没有特别的操作。标准模块types定义了所有标准内置类型的名称。
类型是这样写的:
12.7。空对象
该对象由不显式返回值的函数返回。它不支持特殊操作。只有一个空对象,名为None(内置名称)。
它被写为None。
12.8。省略对象
该对象由扩展切片符号使用(请参见切片)。它不支持特殊操作。有一个省略号对象,名为Ellipsis(内置名称)。
它被写为Ellipsis。当在一个下标,也可以写为...,例如seq[...]。
12.9。未实现的对象
当它们被要求对不支持的类型进行操作时,该对象从比较和二进制操作中返回。有关更多信息,请参阅比较。
它被写为NotImplemented。
12.10。布尔值
布尔值是两个常量对象False和True。它们被用来表示真值(尽管其他值也可以被认为是错误或真实的)。在数值上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相同。bool()如果该值可以被解释为真值(参见上面的真值测试部分),那么可以使用内置函数将任何值转换为布尔值。
它们分别写成False和True。
12.11。内部对象
纠错
请参阅此信息的标准类型层次结构。它描述了堆栈框架对象,追溯对象和切片对象。
网站建设开发|APP设计开发|小程序建设开发