Types: 12. Other Built-in Types
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__
不建议直接修改。
内置在解释器中的模块是这样写的:<module 'sys' (built-in)>。如果从一个文件加载,它们被写为<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>。
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 "<stdin>", line 1, in <module>
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
定义了所有标准内置类型的名称。
类型是这样写的:<type 'int'>。
12.7。空对象
该对象由不显式返回值的函数返回。它不支持特殊操作。只有一个空对象,名为None
(内置名称)。
它被写为None
。
12.8。省略对象
该对象由扩展切片符号使用(请参见切片)。它不支持特殊操作。有一个省略号对象,名为Ellipsis
(内置名称)。
它被写为Ellipsis
。当在一个下标,也可以写为...
,例如seq[...]
。
12.9。未实现的对象
当它们被要求对不支持的类型进行操作时,该对象从比较和二进制操作中返回。有关更多信息,请参阅比较。
它被写为NotImplemented
。
12.10。布尔值
布尔值是两个常量对象False
和True
。它们被用来表示真值(尽管其他值也可以被认为是错误或真实的)。在数值上下文中(例如,当用作算术运算符的参数时),它们的行为分别与整数0和1相同。bool()
如果该值可以被解释为真值(参见上面的真值测试部分),那么可以使用内置函数将任何值转换为布尔值。
它们分别写成False
和True
。
12.11。内部对象
请参阅此信息的标准类型层次结构。它描述了堆栈框架对象,追溯对象和切片对象。