首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

让你比95%的人更懂Pythonic的内置模块:collections

扩展内置类型 有时,我们需要使一个对象具备Python内置类型的功能,在此基础上还需要增加一些功能。为了达到这个目的,最通用的方法是直接子类化该类。...例如,设想一个将事件建模为字典的事件系统,对此我们需要另外构建事件的元数据。...它接收参数传递的多个映射对象,并生成一个新的映射对象。当原始映射的值发生变化,映射链的值也随之变化。...直接对内置类型进行子类化将会产生一些很难第一眼定位、调试的未知错误。 2、当需要给多个值进行分类,或者函数需要返回多个参数时,使用 命名元组(namedtuple)。...通过抽象基类(abstract base clases),集合类(collections)包含了处理类型的模块。和第一部分提到的比较周全的应用类似:在检查类型时更倾向于使用该界面。

78650

python异常报错详解

所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型) AssertionError...当使用2元组创建此类型的异常时,第一个项目在实例的errno属性上可用(假定为错误编号),第二个项目可用于该 strerror属性(通常是关联的错误消息)。元组本身也可以在args属性上使用。...当EnvironmentError使用3元组实例化异常时,前两个项目如上所述,而第三个项目在该filename属性上可用。但是,为了向后兼容,该 args属性仅包含前两个构造函数参数的2元组。...异常ValueError 当内置操作或函数接收到具有正确类型但不正确值的参数时引发,并且情况未被更精确的异常描述,例如IndexError。 异常VMSError 仅适用于VMS。...异常ZeroDivisionError 当分割或模运算的第二个参数为零时提升。关联值是指示操作数的类型和操作的字符串。 以下例外被用作警告类别 异常Warning 警告类别的基类。

4.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    流畅的python读书笔记-第十章-继

    ——Alan Kay 子类化内置类型很麻烦 (如 list 或 dict)) ,别搞这种 直接子类化内置类型(如 dict、list 或 str)容易出错,因为内置类型的 方法通常会忽略用户覆盖的方法。...不要子类化内置类型,用户自己定义的类应该继承 collections 模块的类, 例如UserDict、UserList 和 UserString,这些类做了特殊设计,因此易于扩展。...类都有一个名为__mro__ 的属性,它的值是一个元组,按照方法解析顺序列出各个超类,从当前类一直向上,直到 object 类。D 然而,使用 super() 最安全,也不易过时。...而接口继承则是框架的支柱。 02. 使用抽象基类显式表示接口 现代的 Python 中,如果类的作用是定义接口,应该明确把它定义为抽象基类。...首先,我们说明了 mro 类属性中蕴藏的方法解析顺序,有了这一机制,继承方法的名称不再会发生冲突 不要子类化内置类型,用户自己定义的类应该继承 collections 模块的类

    37910

    流畅的 Python 第二版(GPT 重译)(七)

    这将拒绝迭代器,同时安全地处理元组、数组和其他现有或将来完全实现Sequence接口的类。调用len()通常非常便宜,而无效的参数将立即引发错误。...Python 术语表中关于抽象基类的条目对它们为鸭子类型语言带来的价值有很好的解释: 抽象基类通过提供一种定义接口的方式来补充鸭子类型,当其他技术(如hasattr())显得笨拙或微妙错误时(例如,使用魔术方法...如果将来有人更改class语句以更改基类或添加另一个基类,他们可能会忘记更新__setitem__的内容,从而引入错误。 第二个原因是,super实现了处理具有多重继承的类层次结构的逻辑。...混入类 混入类设计为与至少一个其他类一起在多重继承安排中被子类化。混入不应该是具体类的唯一基类,因为它不为具体对象提供所有功能,而只是添加或自定义子类或兄弟类的行为。...实际上,这意味着混入必须首先出现在类声明中基类元组中。示例 14-9 展示了两个示例。

    20010

    Python3.7 dataclass使

    本文将带你走进python3.7的新特性dataclass,通过本文你将学会dataclass的使用并避免踏入某些陷阱。...使用dataclasses.asdict和dataclasses.astuple我们可以把数据类实例中的数据转换成字典或者元组: >>> from dataclasses import asdict,...dataclass装饰器会检查当前class的所有基类,如果发现一个dataclass,就会把它的字段按顺序添加进当前的class,随后再处理当前class的field。...所有生成的方法也将按照这一过程处理,因此如果子类中的field与基类同名,那么子类将会无条件覆盖基类。子类将会根据所有的field重新生成一个构造函数,并在其中初始化基类。...生成的同名方法时会引发的问题 当使用可变类型(如list)时,应该考虑使用field的default_factory 数据类的属性都是公开的,如果你有属性只需要初始化时使用而不需要在其他时候被访问,请使用

    1.2K10

    python中的type和object详解

    object是reptile的基类,reptile是snake的超类(基类)。这里有没有想起来 object是所有类的超类?  Squasher = snake()是类型实例关系。...(3):额,的类型是.  (4):输出“类int”的基类。  (5):列出整型这个对象所有的属性。 ...元组(,)是类型int的超类(或说父类)。一个类型的超类可能不止一个,所以用元组表示。 ...A:能,这就得元类出场了,通过属性__metaclass__你可以重新创造一个类型出来。这里我简单列一个例子。元类的话下面会简单介绍。 ...第三列地实例无法子类化;  第三列地对象也不允许被实例化;  第一,二列包含类型,第三列包含非类型;  如果创造一个继承的对象,那么它会被放在第一列,即元类。这里继续强调,类和类型是一样的。

    78920

    Python学习之魔法方法

    在Python3.0中没有"旧式"的类,也不需要侠士的子类化Object或者将元类设置为type(代码起始行__metaclass__=type).那是因为所有的类都是隐式的成为Object的子类。...如果没有明确超类的话,就会直接子类化;否则间接子类化。...重写一般方法和特殊的构造方法:  了解过继承的概念后我们知道,每个类都可能拥有一个或者多个超类,子类从父类那里继承父类的一些行为方式。不仅如此,我们也可以重写一些超类的方法来自定义继承行为。...这是在通一个类中的__init__函数的使用。来看扩展案例。吃是鸟类的基本特征,可以将Bird作为鸟类的基类。...对于序列,键应该是0~n-1的整数(n是长度),对于映射,可以是任何类型的键。

    49120

    Python基础:网络编程sockets

    socketserver 此模块简化了socket的编写。     1、它有一个基类,定义了如何建立连接。BaseServer提供了服务类接口,BaseServer使用了select创建了多线程。...同时,也是一个基类。 UDPServer 传输UDP数据。...get_request()接受socket请求,并返回二元组包含要用于与客户端通信的新socket对象,以及客户端的地址。...如果单个请求需要很长的时间来处理,服务器忙时请求被放置到队列中,最多可以放request_queue_size个。一旦队列已满,来自客户端的请求将得到 “Connection denied”错误。...         def handler(self):                                        # 重写基类里的handler()方法,在这个方法里处理接收、发送请求

    48520

    《流畅的Python》第十二章学习笔记

    子类化内置类型 在Python2.2之前,内置类型不能子类化 内置类型不会掉用用户定义的类覆盖的特殊方法。...小结 直接子类化内置类型容易出错,因为内置类型的方法通常会忽略用户覆盖的方法。 不要子类化内置类型,用户自己定义的类应该继承collectiions模块中的类。...继承重用代码是实现细节,通常可以换用组合和委托模式 使用抽象基类显式表示接口 创建abc.ABC或其他抽象基类的子类 通过混入重用代码 混入类绝对不能实例化,而且具体类不能只继承混入类。...抽象基类中实现的方法只能与抽象基类及其超类中的方法协作。这表明,抽象基类中的具体方法只是一种便利措施,因为这些方法所做的一切,用户调用抽象基类中的其他方法也能做到。...不要子类化多个具体类 具体类的超类中除了这一个具体超类之外,其余的都是抽象基类或者混入。

    44010

    python中的type和object详解

    object是reptile的基类,reptile是snake的超类(基类)。这里有没有想起来 object是所有类的超类? Squasher = snake()是类型实例关系。...元组(,)是类型int的超类(或说父类)。一个类型的超类可能不止一个,所以用元组表示。...A:能,这就得元类出场了,通过属性__metaclass__你可以重新创造一个类型出来。这里我简单列一个例子。元类的话下面会简单介绍。 >>> class A(type): ......第三列地实例无法子类化; 第三列地对象也不允许被实例化; 第一,二列包含类型,第三列包含非类型; 如果创造一个继承的对象,那么它会被放在第一列,即元类。...因为水平限制,可能会出现错误。请批判性阅读。

    54310

    Qt事件系统与应用举例

    事件可以由QObject子类的任何实例接收和处理,但它们与小部件尤其相关。 本文档介绍了在典型应用程序中如何传递和处理事件。 2....该函数不处理事件本身; 根据所传递事件的类型,它针对该特定事件类型调用事件处理程序,并根据事件被接受还是忽略发送响应。 一些事件,例如QMouseEvent和QKeyEvent ,来自窗口系统。...事件类型 大多数事件类型都有特殊的类,尤其是QResizeEvent , QPaintEvent , QMouseEvent , QKeyEvent和QCloseEvent 。...每个类都将QEvent子类化,并添加特定于事件的函数。 例如, QResizeEvent添加了size()和oldSize()来使小部件能够发现其尺寸如何更改。 4....如果您没有在虚拟函数的实现中执行所有必要的工作,则可能需要调用基类的实现。 5. 事件过滤器 6. 发送事件 7. 小结 Qt的主函数中会开启一个事件循环,其实就是一个处理事件的while循环。

    1.7K30

    类和对象的创建过程(元类,__new__,__init__,__call__)

    类主体在一个新的名称空间中执行,类名在本地绑定到类型的结果(名称、基、名称空间)。 可以通过在类定义行中传递元类关键字参数来定制类创建过程,或者从包含此类参数的现有类继承。..., attrs   name: 类的名字   bases: 基类,通常是tuple类型   attrs: dict类型,就是类的属性或者函数  metaclass 原理 1.基础 metaclass的原理其实是这样的...所以在创建类的过程,我们可以在这个函数里面修改name,bases,attrs的值来自由的达到我们的功能。...否则,如果至少有一个基类,则使用它的元类(这首先查找类属性,如果没有找到,则使用它的类型)。 否则,如果一个名为元类的全局变量存在,就会使用它。...答案就是:可以创建一个类的东西。   那么什么可以用来创建一个类呢?   type,或者任何使用到type或者子类化type的东东都可以。

    1.2K50

    2 . python Collectio

    _source                 带有纯Python源代码的字符串,用于创建命名元组类。 源使得命名元组自我记录。 它可以打印,使用exec()执行,或保存到文件并导入。     ..._fields                 列出字段名称的字符串元组。 用于内省和从现有命名元组中创建新的命名元组类型。 ?             ...由于命名元组是常规的Python类,因此可以使用子类轻松添加或更改功能。以下是如何添加计算字段和固定宽度打印格式的方法: ?                 ...子类化对于添加新的存储字段没有用处。                  相反,只需从_fields属性创建一个新的命名元组类型: ?                 ...可以通过直接分配__doc__字段来自定义文档字符串: ?                 可以使用_replace()来自定义原型实例来实现默认值: ?

    1.1K10

    Python 异常处理总结

    常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit 生成器(generator)发生异常来通知退出 StandardError 所有的内建标准异常的基类 ArithmeticError...所有数值计算错误的基类 FloatingPointError 浮点计算错误 OverflowError 数值运算超出最大限制 ZeroDivisionError 除(或取模)零 (所有数据类型) AssertionError...Unicode 编码时错误 UnicodeTranslateError Unicode 转换时错误 Warning 警告的基类 DeprecationWarning 关于被弃用的特征的警告 FutureWarning...你可以通过except语句来捕获异常的参数,如下所示: ? 变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。 元组通常包含错误字符串,错误数字,错误位置。...以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。

    1.1K60

    PostgreSQL概述

    综上所述,一个查询引擎应该包括:查询语句接收模块、词法解析模块、语法解析模块、查询树改写模块(规则优化模块)、查询优化模块(包括逻辑优化和物理优化两部分)、查询计划生成模块、元数据管理模块、访问控制模块等基本模块...图1-1 查询引擎架构图 查询语句优化 当查询引擎接收到一条用户查询请求后,查询引擎会依据该查询语句的类型进行分类处理;但在处理查询语句之前,考虑到复杂查询语句求解最优访问路径时的代价,有些查询引擎会使用查询计划缓存机制...查询引擎对不同类型的查询语句有着不同的处理机制,对于工具类查询语句以及非工具类查询语句,PostgreSQL有着截然不同的处理流程。...为了能够正确且高效地计算出不同查询访问路径下的查询代价,查询引擎依据基表之上存在的约束条件,估算出获取满足该约束条件的元组需要的I/O代价和CPU代价。...我们以概率论和统计分析为工具,通过元数据表pg_statistic中的统计信息计算出满足该约束条件的元组占整个元组的比重,以此来估算该约束条件下的元组数量。

    2.3K21

    Python -- 异常处理

    变量接收的异常值通常包含在异常的语句中。在元组的表单中变量可以接收一个或者多个值。 元组通常包含错误字符串,错误数字,错误位置。 #!...SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 StopIteration 迭代器没有更多的值 GeneratorExit...生成器(generator)发生异常来通知退出 StandardError 所有的内建标准异常的基类 ArithmeticError 所有数值计算错误的基类 FloatingPointError 浮点计算错误...EOFError 没有内建输入,到达EOF 标记 EnvironmentError 操作系统错误的基类 IOError 输入/输出操作失败 OSError 操作系统错误 WindowsError 系统调用失败...Unicode 转换时错误 Warning 警告的基类 DeprecationWarning 关于被弃用的特征的警告 FutureWarning 关于构造将来语义会有改变的警告 OverflowWarning

    89630
    领券