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

python的抽象基类

与jvm上的语言不一样,python的语言没有interface关键字,而且除了抽象基类,每个类都有相应的接口:类实现继承的公开属性(方法数据类型) 定义里,受保护的属性和私有属性不在接口中:即便...__x a = test(3) a.x Out[3]: 3 接口是实现特定方法的集合,协议和继承没有关系,一个类可能实现多个接口,从而让实例扮演多个角色。 接下来再继续看看序列协议。...__getitem__,python自动就帮你实现了迭代,contains方法。...__setitem__ = setitem shuffle(a) 9 19 10 setitem的参数的名只是约定一样,只不过python会往里面传参数,类的方法本质上也只是一个函数而已。...“鸭子类型”:忽略对象的真正类型,转而关注对象有没有实现所需的方法,签名和语义。 继承抽象基类很简单,只要实现python里的特殊方法__len__之类的,这样python就会自动识别。

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

python的字典和集合

set的实现也依赖于散列表 常见的字典方法: 如之前所述: Container: __contains__ Iterable: __iter__ Sized: __len__ Mapping: __getitem...__ __contains__ __eq__ __ne__ get items keys values MutableMapping __Setitem__ __defitem__ clear pop...当然还有更简单的,collections模块里的defaultdict或者自己定义一个dict的子类,子类中实现__missing__方法 1. d = collections.defaultdict...标准库中字典的变种: collections里的 OrderedDict:添加键的时候会保持顺序,popitem是默认删除最 ChainMap:可容纳数个不同的映射对象,进行键查找时会被作为一个整体查找...Counter:会给键准备一个计数器,用于计数键的更新次数 UesrDict:用纯python实现的dict,常用来方便用户继承 不可变映射类型,实际上可以理解为视图 MappingProxyType

74530

《流畅的Python》学习笔记之字典

主要介绍:* 常见的字典方法* 如何处理查不到的键* 标准库中 dict 类型的变种* 散列表的工作原理 泛映射类型 collections.abc 模块中有 Mapping 和 MutableMapping...(如果一个对象实现了 __eq__ 方法,并且方法中用到了这个对象的内部状态的话,那么只有当所有这些内部状态都是不可变的情况下,这个对象才是可散列的。)...映射的弹性查询 有时候,就算某个键映射里不存在,我们也希望通过这个键读取值的时候能得到一个默认值。有两个途径能帮我们达到这个目的,这个类型而不是普通的 dict,的子类,然后子类中实现方法。...方法只会被调用。提供 __missing__ 方法对 get 或者 __contains__(in 运算符会用到这个方法)这些方法的是有没有影响。...self.data[str(key)]=item 因为 UserDict 继承的是 MutableMapping,所以 StrKeyDict 里剩下的那些映射类型都是从 UserDict、MutableMapping

2K100

深度剖析Python字典和集合

函数的关键字参数、实例的属性和模块的命名空间都能够看到它的身影,我们自己写代码也经常会用到。 “集合”这个概念在Python中算是比较年轻的,使用率也比较低,元素去重和求差集并集使用过。...可散列的数据类型 Python词汇表中,关于可散列类型的定义有这样一段话: “如果一个对象是可散列的,那么在这个对象的生命周期中,它的散列值是不变的,而且这个对象需要实现__hash__()方法。...正是如此,Python标准库里的所有映射类型都是利用dict来实现的。...静态语言中,如果需要传入 Animal 类型,则传入的对象就必须是 Animal 类型或者它的子类,否则,将无法调用 run() 方法。...,当数据量很大,不适合用dict和set,而应该考虑用元组由具名元组构成的列表。

1.6K00

Python语言学习基础:魔术方法的定义、迭代器与生成器、常用魔术方法及其分类型介绍

目录 前言 魔术方法的定义 迭代器与生成器 常用魔术方法 按类型介绍魔术方法 结束 参考文献 摘要:本文就来详细介绍Python言中的魔术方法,其中包括魔术方法的定义、迭代器与生成器的概念、常用的魔术方法以及按类型分类介绍...本文就来详细介绍Python言中的魔术方法,其中包括魔术方法的定义、迭代器与生成器的概念、常用的魔术方法以及按类型分类介绍,通过介绍和学习这些基础知识,让大家能够更好地理解和使用Python语言,分享给有需要的小伙伴...魔术方法的定义 先来了解魔术方法Python言中魔术方法是以双下划线(__)开头和结尾的特殊方法,这些方法在对象的创建、操作和销毁等过程中被自动调用,从而实现对对象的控制和定制。...在上面的示例代码块中,__init__方法被用来初始化MyClass类的实例,通过传递参数name,我们可以初始化时给对象设置一个名字,然后调用say_hello方法来打印出相应的问候。...结束 通过本文对Python言中的魔术方法的定义、迭代器与生成器的概念、常用的魔术方法以及按类型分类的详细介绍,魔术方法可以让我们在对象的创建、操作和销毁等过程中实现自定义的行为和特性,通过理解和掌握这些基础知识

52944

35个高级Python知识点总结

.1 None类型 Python解释器启动,会创建一个None类型的None对象,并且None对象全局只有一个。...所以考虑使用BFS(广度优先搜索算法),那么问题回到第一个继承关系,假定C和D具备重名方法调用A的实例的方法应该先在B中查找,理应调用D中的方法,但是使用BFS的时候,C类中的方法会覆盖D类中的方法...中使用双下划线+属性名称实现类似于静态语言中的private修饰来实现数据封装。...__getattribute__()方法,它允许我们访问对象自定义访问行为,值得注意的是小心无限递归的发生。...值得注意的是,只要实现这三种方法中的任何一个都是描述符。 仅实现__get__()方法的叫做非数据描述符,只有初始化之后才能被读取。

2.1K20

一种Python全局配置规范以及其修改

GitHub:https://github.com/lidingke ❈ 一、模块 or global 很多初学者有个误区,就是Python中需要配置一个全局的参数,首先想到的是global关键字,...二、单例字典 讲模块之前,想谈谈尝试过另一种方式,就是自定义单例字典,具体做法是这样的。 先继承collections模块中MutableMapping,并重写相关接口。...单例字典是项目初期引入,并在项目的迭代过程中给我造成最大困扰的一个东西,开始几乎将所有的配置都写入到这个字典中,然后程序运行中这个字典又被分散程序各处的各个实例修改,运行到后面根本不知道字典里有什么...在后期将这个庞大的字典进行重构,重构的过程按照下面的方式进行: 1、将各个类中该字典的引用点,由各个方法收拢到init方法。 不应该 ? 应该 ? 2、将各个引用点的名称统一。 不应该 ? 应该 ?...相对于每个类初始化时直接调用json配置变量这种方案是有好处的,定义了configs模块有助于代码的静态检查,形成了一种像C语言中.h文件和.c文件的关系,头文件中定义相关的变量,.c文件中实现使用

1.9K90

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

我们首次 “静态协议”(第八章)中看到这一点。 类型映射 图 13-1 中描述的四种类型化方法是互补的:它们各有优缺点。不应该否定其中任何一种。 图 13-1。...几年前,当我第一次编写FrenchDeck示例确实实现了一个shuffle方法。...我们自己的 ABC 中实现__subclasshook__是个好主意?可能不是。...不区分大小写的映射 示例 14-8 展示了UpperCaseMixin,一个设计用于提供对具有字符串键的映射进行不区分大小写访问的类,通过添加查找这些键将它们大写。...使用 ABC 明确接口 现代 Python 中,如果一个类旨在定义一个接口,它应该是一个明确的 ABC typing.Protocol子类。ABC 应该仅从abc.ABC其他 ABC 继承。

13110

第二章、深入类和对象

接口中定义各种方法,然后继承接口的各种类进行具体方法实现。...抽象基类就是定义各种方法而不做具体实现的类,任何继承自抽象基类的类必须实现这些方法,否则无法实例化 (1)判断类时候有某种属性 #判断类是否有某种属性 class Company(object):...print(hasattr(com,"__len__")) #True #虽然用hasattr可以判断,但正确的方式是定义一个抽象基类 #我们某些情况下希望判定某个对象的类型,可以用抽象基类...= '2018-05-09' new_day = Date.from_string(date_str) print(new_day) # 2018/5/9 2.7.python对象的自省机制... 计算机编程中,自省是指一种能力:检查某些事物以确定它是什么、它知道什么以及它能做什么。

88100

课时47:魔法方法:定制序列

目录:   一、定制序列   二、课时47课后习题及答案 **************** 一、定制序列 **************** 本节要谈的是定制容器,要想成功的实现容器的定制,便需要先谈一谈协议...协议(Protocols)与其他编程语言中的接口很相似,它规定你哪些方法必须要定义。然而,Python中的协议就显得不那么正式。事实上,Python中,协议更像是一种指南。...这有点像Python极力推崇的鸭子类型【扩展阅读】鸭子类型(duck typing) Python中,像序列类型(如列表、元组、字符串)映射类型(如字典)都是属于容器类型。...定义当迭代容器中的元素的行为 __reversed__(self) 定义当被 reversed() 调用时的行为 __contains...__(self, item) 定义当使用成员测试运算符(in not in)的行为 举个例子:编写一个不可改变的自定义列表,要求记录列表中每个元素被访问的次数。

34030

Python 字典 dict

有两个途径能帮我们达到这个目的,一个是通过 defaultdict,这个类型而不是普通的 dict,另一个 是给自己定义一个 dict 的子类,然后子类中实现 __missing__ 方法。...__missing__ 所有的映射类型处理找不到的键的时候,都会牵扯到 __missing__ 方法。这也是这个方法称作“missing”的原因。...提供 __missing__ 方法对 get 或者 __contains__(in 运算符会用到这个方法)这些方法的使用没有 影响。...,查不到值转换为 str 重新查询 字典的变种 标准库里 collections 模块中,除了 defaultdict 之外还有其他的映射类型。...这样做的好处是,UserDict 的子类就能在实现 __setitem__ 的时候避免不必要的递 归,也可以让 __contains__ 里的代码更简洁。

78640

非常全的通俗易懂 Python 魔法方法指南

所以,为了修复感知的Python文档的缺陷,开始提供更为通俗的,有示例支持的Python魔法方法指南。一开始 写了一些博文,现在把这些博文总起来成为一篇指南。...__cmp__ 应该在 self other 返回正整数。...__xor__(self, other) 实现按位异运算符 ^ 。 反射算数运算符 还记得刚才说会谈到反射运算符?...了解激动人心的内容之前,首先你需要掌握一些预备知识。 既然讲到创建自己的序列类型,就不得不说一说协议了。协议类似某些语言中的接口,里面包含的是一些必须实现方法。...当你的序列类是有序时,类似列表和元组,再实现这个方法, __contains__(self, item) __contains__ 定义了使用 in 和 not in 进行成员测试类的行为。

1.8K32

Python字符串的前世今生

Unicode时代,Python字符串已被证明是处理文本的一种便捷方法本文中,我们就来研究Python字符串是如何演化并能处理各类文本的,特别是窥视其幕后的运作方式。...为此,就要将每个字符映射到某个字节组成的单元序列,这种映射称为字符编码。我们所用的工具都要能够将文本字符编码为字节,还能够从字节中解码。这样才能实现文本内容的呈现和存储。...Unicode字符并不牵扯到字符渲染的字形,字形是字体设计师的事情,虽然字符和字形之间可能有比较复杂的关系。 Unicode不直接将字符映射到字节,而是分两步映射: 编码字符集将字符映射到代码点。...关于Python字符串还有很多要说,如 str.find()和 str.join()等字符串方法实现,就可以用一个专题来讨论。...这种方法对于Python似乎很有效,因为访问字符串的元素很容易,而且大多数情况下,程序员甚至不考虑这些元素应该是字符还是字形集群。 参考文献 [1].

1.2K10

Python判断字符串是否包含特定子串的7种方法

, python" False 2、使用 find 方法 使用 字符串 对象的 find 方法,如果有找到子串,就可以返回指定子串字符串中的出现位置,如果没有找到,就返回-1 >>> "hello,...,实际上当你使用 in 和 not in Python 解释器会先去检查该对象是否有__contains__魔法方法。...__contains__("llo") True >>> >>> "hello, python"....6、借助 operator operator模块是python中内置的操作符函数接口,它定义了一些算术和比较内置操作的函数。operator模块是用c实现的,所以执行速度比 python 代码快。...欢迎言中给出。 作者:写代码的明哥 来源:Python编程时光 ---- _往期文章推荐_ 超详细Python字符串用法大全 ----

194.8K43

Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?

花下猫:在上一篇《Python 为什么能支持任意的真值判断? 》文章中,我们分析了 Python 真值判断的底层实现,可以看出 Python 在对待布尔值,采用了比较宽泛的态度。...所有概念上需返回布尔结果的内置操作,都将更改为返回 False True,而不再是 0 1,例如,比较操作、“not”运算和 isinstance() 之类的断言方法。...它使想起了一些反对本 PEP 的帖子... :-) (译注:1、签饼即 fortune cookies,这是一种美国文化特色。美国的中餐馆结账的时候流行给客人一些写了签的饼干,一般都是祝福。...1、本 PEP 应该被接受? =>是的。 有很多反对本 PEP 的观点。其中多数是出于误解。已尝试在下面的 PEP 正文中澄清一些最常见的误解。...(本 PEP 下,operator.truth() 成为了 bool() 的别名;这也可以。) 6、bool 应该继承自 int ? =>是的。

1K20

27 个问题,告诉你Python为什么这么设计

为什么Python对某些功能(例如list.index())使用方法实现,而其他功能(例如len(List))使用函数实现? 为什么 join()是一个字符串方法而不是列表元组方法?...为什么Python中没有switchcase语句? 难道不能在解释器中模拟线程,而非得依赖特定于操作系统的线程实现? 为什么lambda表达式不能包含语句?...可以将Python编译为机器码,C其他语言Python如何管理内存? 为什么CPython不使用更传统的垃圾回收方案? CPython退出为什么不释放所有内存?...当没有实现映射的类有get()key()方法,或者不是文件的类有write()方法,我们偶尔会感到困惑。...可以将Python编译为机器代码,C其他语言? Cython 将带有可选注释的Python修改版本编译到C扩展中。

6.6K11

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

如果子类化使用 Python 编写的类,如 UserDict MutableMapping,就不会受此影响。...调用框架不受自己控制的类层次结构中的 方法,尤其适合使用 super()。 多重继承的真实应用 1 多重继承能发挥积极作用。...把接口继承和实现继承区分开 使用多重继承,一定要明确一开始为什么创建子类。...通过混入重用代码 一个类的作用是为多个不相关的子类提供方法实现 应该把那个类明确地定义为混入类(mixin class) 从概念上讲,混入不定义新类型,只是打包方法,便于重用。...混入类应该提供某方面的特定行为,只实现少量关系非常紧密的方法。 04. 名称中明确指明混入 因为 Python 中没有把类声明为混入的正规方式,所以强烈推荐名称中加入...Mixin 后缀。

36410
领券