核心类型复习和总结

未匹配的标注

现在已经在实践中了解了所有Python核心内置类型,让我们复习一些它们共享的属性来结束对象类型之旅。表9-3根据之前介绍的类型类别将目前我们见过的所有主要类别进行分类。下面是要记住的几点:

  • 根据对象类别,对象共享操作;比如序列对象——字符串,列表和元组——全都共享如“连接、长度、索引”的序列操作。
  • 只有可变对象——列表、字典和sets——可以被就地改变;不能就地修改数字、字符串或元组。
  • 文件只导出方法,所以可变性并不真的适用于它们——当他们被处理时,其状态可能被改变,但这和Python核心类型可变性限制并不完全一样。
  • 表9-3中的“数字”包括所有数字类型:整数(and the distinct long integer in 2.X)、浮点数、复数、小数和分数。
  • 表9-3中的“字符串”包括了 str,还有3.X中的 bytes 和 2.X中的 unicode类型; 在 3.X,2.6和2.7中的 bytearray 字符串类型是可变的。
  • Sets 有点像无值字典的键,但它们不映射到值并没有顺序,所以sets既不是映射也不是序列类型;frozensetset 的不可变的一种变体。
  • 除了类型类别操作,从2.6和3.0开始,在表9-3中的所有类型都有可调用的方法,它们通常是类型专属的。image-20230312210154782

为什么你要关心:操作符重载

在本书的第6部分,将了解:使用类来实现的对象可以从这些列表中任意挑选。比如,如果要提供一个新类型的,与内置序列一致的专用序列对象,可以编写一个类,重载索引和连接之类的操作:

class MySequence:
  def __getitem__(self, index):
    # Called on self[index], others
  def __add__(self, other):
    # Called on self + other
  def __iter__(self):
    # Preferred in iterations

等等。还能通过选择性地实现用于就地修改操作的方法来让新对象可变或不可变(比如:__setitem__self[index]=value assignments 时被调用)。

虽然这超出了本书的范围,但在外部文件如C中,将新对象实现为C扩展类型是可能的。为了这些,我们填充了C函数指针槽来在数字、序列和映射操作集之间进行选择。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~