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

python面向对象多态-相关内置函数-内置魔法函数-迭代协议-上下文管理-04

多态 一种事物具备不同形态 例如:水 --> 固态、液态、气态 多态:# 多个不同对象可以相应同一个对象,产生不同结果 首先强调,多态不是一种特殊语法,而是一种状态,特性(多个不同对象可以相应同一个方法...中常见多态(不同对象类型,拥有相同方法,不同结果) # 不管什么类型,他都与type这个方法 ---> python中多态体现 # 多态在python中其实很常见,因为到处充斥着继承与组合...,用于优化对象内存 优化原理:将原本不固定属性数量,变得固定了,这样解释就不会以这个对象创建名称空间(所以__dict__也没了),从而达到减少内存开销效果 另外当中出现了__slots__...,我们可以自定义运算符来实现,让自定义对象也支持比较符 上述代码中.other指的是另一个参与比较对象 大于和小于只要实现一个即可,符号如果不同解释会自动交换两个对象位置 迭代协议 迭代:是指具有...__iter__和__next__对象 我们可以为对象增加这两个方法来让对象变成迭代 class MyIter: # num 传入,用来指定迭代次数 def __init__(self

65040

Python 基础:与函数

“__new__”方法是新式特有的方法,通常情况下,__new__方法会创建返回cls(cls指代当前实例,然后调用该类”__init__”方法作为初始化方法,该方法接收这个实例(即self)...self名字并不是规定死,但是最好还是按照约定是用self self总是指调用时实例。...究竟为什么要使用元? 结语: 首先,你知道了其实是能够创建出实例对象。好吧,事实上,本身也是实例,当然,它们是元实例。...://python.jobbole.com/82300/ 8、Python 迭代和生成器 8.1 迭代 __iter__()和next()方法 自定义迭代 迭代和可迭代对象 8.2...像列表这种序列类型对象,可迭代对象迭代对象是相互独立存在,在迭代过程中各个迭代相互独立;但是,有的可迭代对象本身又是迭代对象,那么迭代就没法独立使用。

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

这些python3小知识点你都知道吗?

,使用nonlocal关键字; 21、递归 函数调用自身 设置了正确返回条件 22、字典 字典不支持一键多值。...如果第一个参数不是对象,则永远返回False。 classinfo 可以是对象组成元祖,只要class与其中任何一个候选子类,则返回 True。...每一次对过程重复被称为一次“迭代”,而每一次迭代得到结果会被用来作为下一次迭代初始值。迭代不是一个容器,是实现了next()方法对象。...46、生成器、迭代 生成器所能实现任何操作都可以用迭代来代替,因为生成器实际上就是基于迭代实现,生成器只是一个yield语句,内部自动创建iter()和next()方法。...generator 是用来产生一系列值 yield 则像是 generator 函数返回结果 yield 唯一所做另一件事就是保存一个 generator 函数状态 generator 就是一个特殊类型迭代

63060

作为Python中级程序员,有句话不知当讲不当讲 ( ̄へ ̄)

简单来说Python装饰就是指某些函数或其他可调用对象,以函数或作为可选输入参数,然后返回函数或形式。...▍生成器 Python生成器是创建迭代一种简单方法。上面提到都由Python生成器自动处理。 生成器是一个函数,它返回一个对象迭代),我们可以遍历该对象(每次一个值)。...不同之处在于,虽然return语句完全终止了一个函数,但是yield语句暂停保存函数所有状态,然后在后续调用时继续执行。 ? 为什么Python中使用生成器?...▍单继承 子类将具有基所有功能,还可以修改和增强。 子类初始希望调用基初始,以使整个对象初始化。 ?...调用其他初始: 1、其他语言自动调用base class初始 2、Python像对待其他方法一样处理 _init__() 3、base class _init__()在被覆盖时不会被调用 4、

1.1K20

python学习总结

字典Dict Python内置了字典,使用key-value存储,具有极快查找速度。和list相比,查找速度要高很多。 为什么dict查找速度这么快?因为dict实现原理和查字典是一样。...对于不可变对象作为函数参数,相当于C系语言值传递; 对于可变对象作为函数参数,相当于C系语言引用传递。 高级特性 迭代 Python迭代是什么呢?...迭代中有两个基本方法: next方法:返回迭代下一个元素 __iter__方法:返回迭代对象本身。 生成器 带有yield函数在Python中被称为生成器。...元 是用来描述如何生成一个对象代码段,在Python中,类同样是一个对象,只要使用class关键字,Python解释在执行时候就会创建一个对象。...用Python语言介绍就是,调用一个函数A,这个函数A返回了一个函数B给你,这个返回函数B就叫做闭包。 装饰就是一个闭包。

1K50

python核心知识汇总(精编版)

reversed() 和 sorted() 同样表示对列表 / 元组进行倒转和排序,reversed() 返回一个倒转后迭代;sorted() 返回排好序新列表。...对于容器,你可以很直观地想象成多个元素在一起单元;而不同容器区别,正是在于内部数据结构实现方法。 容器是可迭代对象,可迭代对象调用 iter() 函数,可以得到一个迭代。...对于不可变对象(字符串、整型、元组等等),所有指向该对象变量总是一样,也不会改变。但是通过某些操作(+= 等等)更新不可变对象值时,会返回一个新对象。...__init__用来初始化,__new__用来生成一个实例。 成员函数:是正常函数,第一个参数必须是self;可通过此函数来实现查询或修改属性等功能。...print(f'use time: {time.time() - beg}') return res return _log @LogTime() # 初始化装饰实例

1.4K10

Python 魔法函数总结

__bases__ 返回直接父(实例没有该属性) class.__basicsize__ 字节数 obj.__sizeof__() 对象在内存中字节数 class....__slots__() 只定义特定集合某些属性,使用之后变成静态一样,没有了__dict__, 实例也不可新添加属性 相关魔法函数 目的 所编写代码 Python 实际调用 初始化一个实例...由于 bytes 类型引入而从 Python 3 开始出现。 迭代相关 目的 所编写代码 Python 实际调用 遍历某个序列 iter(seq) seq....__reversed__() 无论何时创建迭代都将调用 __iter__() 方法。这是用初始值对迭代进行初始绝佳之处。...许多数据类型都可以进行比较——字符串、列表,甚至字典。如果要创建自己,且对象之间比较有意义,可以使用下面的特殊方法来实现比较。

57210

Python中下划线---完全解读

{'i': 1234} 接下来是保留方法,可以把保留方法分类: 基础方法 序号 目的 所编写代码 Python 实际调用 ① 初始化一个实例 x = MyClass() x....由于 bytes 类型引入而从 Python 3 开始出现。 行为方式与迭代类似的 序号 目的 所编写代码 Python 实际调用 ① 遍历某个序列 iter(seq) seq....__reversed__() 无论何时创建迭代都将调用 __iter__() 方法。这是用初始值对迭代进行初始绝佳之处。...无论何时从迭代中获取下一个值都将调用 __next__() 方法。 __reversed__() 方法并不常用。它以一个现有序列为参数,并将该序列中所有元素从尾到头以逆序排列生成一个新迭代。...查阅 With 状态上下文环境管理 了解更多细节。 真正神奇东西 如果知道自己在干什么,你几乎可以完全控制是如何比较、属性如何定义,以及子类是何种类型。

1.5K110

100 个基本 Python 面试问题第四部分(81-100)

enumerate() 函数将计数变量附加到可迭代对象,并将其作为“枚举”对象返回。 我们可以直接在“for”循环中使用这个对象,或者通过调用 list() 方法将它转换成一个元组列表。...Python globals() 函数将当前全局符号表作为字典对象返回Python 维护一个符号表来保存有关程序所有必要信息。此信息包括程序使用变量、方法和名称。...但是,Python 有一种独特方式来声明静态变量。 在声明中使用值初始所有名称都成为变量。那些在方法中获得赋值成为实例变量。...Python生成器是一个返回迭代对象函数。我们可以使用yield 关键字迭代生成器对象。但是我们只能这样做一次,因为它们值不会持久存在于内存中,它们会即时获取值。...它工作原理类似于标准 return 关键字。但它总是返回一个生成器对象。此外,一个方法可以多次调用yield 关键字。 请参阅下面的示例。

3.6K31

独家 | 什么是Python迭代和生成器?(附代码)

Python中创建一个迭代 熟悉Python生成器 实现Python生成器表达式 为什么你应该使用迭代? 什么是可迭代对象“可迭代对象是能够一次返回其一个成员对象”。...像列表、元组、集合、字典、字符串等等之类对象被称为可迭代对象。简而言之,任何你可以循环对象都是可迭代对象。 我们可以使用for循环逐个地返回迭代元素。...迭代跟踪可迭代对象的当前状态。 但可迭代对象迭代不同之处在于__next __()方法只能由迭代访问。这使得无论何时只要我们要求迭代返回下一个值,迭代就会返回下一个值。...它用于分配程序执行期间最初所需任何值。我在这里设置num变量初始值为2; iter()和next()方法使这个变成了迭代; iter()方法返回迭代对象并对迭代进行初始化。...由于对象本身是迭代,因此它返回自身; next()方法从迭代返回当前值,并改变下一次调用状态。我们将num变量值加2,因为我们只打印偶数。

1.2K20

Python学习笔记整理(十五)编写

程序角度, 方法工作方式与简单函数完全一致,只有一个重要差异:方法第一个参数总是接受方法调用隐形主体,也就是实例对象Python会自动把实例方法调用对应到方法函数。...从技术角度来将,迭代环境是通过调用内置函数iter去尝试寻找__iter__方法来实现,而这种方法应该返回一个迭代对象。...如果已经提供了,Python就会重复调用这个迭代对象next方法,直到发生StopIteration异常。...在较为复杂场景中,迭代对象可定义为个别的对象,有自己状态信息,对相同数据支持多种迭代。以Python raise语句发出信号表示迭代结束。...__iter__对象会在调用过程中明确地保留状态信息。所以比__getitem__具体更好通用性。__iter__迭代比__getitem__更复杂和难用。迭代是用来迭代,不是随机索引运算。

88610

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

你必须记住改变程序中两个地方 -- 第二次出现隐藏在循环底部。 最好方法是使用迭代,这样能通过 for 语句来循环遍历对象。...CPython退出时为什么不释放所有内存? 当Python退出时,从全局命名空间或Python模块引用对象并不总是被释放。...然后,你必须确保驻留在字典(或其他基于 hash 结构)中所有此类包装对象哈希值在对象位于字典(或其他结构)中时保持固定。...此函数从提供迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按keys排序: for key in sorted(mydict): ......这是静态类型要点 -- 编译 总是 在编译时知道每个变量作用域。 Python使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

6.6K11

python 数据模型

A8%A1%E5%9E%8B.ipynb 前言 数据模型其实是对 Python 框架描述,它规范了这门语言自身构建模块接口,这些模块包括但不限于序列、迭代、函数、和上下文管理。...通常在不同框架下写程序,都需要花时间来实现那些会被框架调用方法,python 当然也包含这些方法,当 python 解释碰到特殊句法时候,会使用特殊方法来激活一些基本对象操作,这种特殊方法,也叫做魔术方法...通过实现 python 这些特殊方法,可以让自定义对象实现和支持下面的操作: 迭代 集合 属性访问 运算符重载 函数和方法调用 对象创建和销毁 字符串表示形式和格式化 管理上下文(也就是 with...python 内置类型:比如列表(list)、字典(dict)等,那么 CPython 会抄近路,即 __len__ 实际上会直接返回 PyVarObject 里 ob_size 属性。...小结 本文介绍了两个代码例子,说明了在自定义时候,实现特殊方法,可以实现和内置类型(比如列表、字典、字符串等)一样操作,包括实现迭代、运算符重载、打印实例对象等,然后还根据是否和运算符相关将特殊方法分为两

97320

Python 经典面试题 二

•分代收集:Python把内存根据对象存活时间划分为三代,对象创建之后,垃圾回收会分配它们所属代。每个对象都会被分配一个代,而被分配更年轻代是被优先处理,因此越晚创建对象越容易被回收。...2.简述面向对象中new和init区别? 1、__new__至少要有一个参数 cls,代表当前,此参数在实例化时由Python解释自动识别。...3、__init__有一个参数 self,就是这个__new__返回实例,__init__在__new__基础上可以完成一些其它初始动作,__init__不需要返回值。...3.列出 Python 中可变数据类型和不可变数据类型,为什么?...•启动python调试pdb,让程序以单步方式运行,可以随时查看运行状态

35352

干货 | 27 个问题,告诉你 Python 为什么如此设计?

你必须记住改变程序中两个地方 -- 第二次出现隐藏在循环底部。 最好方法是使用迭代,这样能通过 for 语句来循环遍历对象。...CPython 退出时为什么不释放所有内存? 当 Python 退出时,从全局命名空间或 Python 模块引用对象并不总是被释放。...然后,你必须确保驻留在字典(或其他基于 hash 结构)中所有此类包装对象哈希值在对象位于字典(或其他结构)中时保持固定。...此函数从提供迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ......这是静态类型要点 -- 编译 总是 在编译时知道每个变量作用域。 Python 使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

2.7K10

Python 核心设计理念27个问题及解答

你必须记住改变程序中两个地方 -- 第二次出现隐藏在循环底部。 最好方法是使用迭代,这样能通过 for 语句来循环遍历对象。...CPython 退出时为什么不释放所有内存? 当 Python 退出时,从全局命名空间或 Python 模块引用对象并不总是被释放。...然后,你必须确保驻留在字典(或其他基于 hash 结构)中所有此类包装对象哈希值在对象位于字典(或其他结构)中时保持固定。...此函数从提供迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ......这是静态类型要点 -- 编译 总是 在编译时知道每个变量作用域。 Python 使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

3.3K21

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

你必须记住改变程序中两个地方 -- 第二次出现隐藏在循环底部。 最好方法是使用迭代,这样能通过 for 语句来循环遍历对象。...CPython退出时为什么不释放所有内存? 当Python退出时,从全局命名空间或Python模块引用对象并不总是被释放。...然后,你必须确保驻留在字典(或其他基于 hash 结构)中所有此类包装对象哈希值在对象位于字典(或其他结构)中时保持固定。...此函数从提供迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按keys排序: for key in sorted(mydict): ......这是静态类型要点 -- 编译 总是 在编译时知道每个变量作用域。 Python使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

3.1K20

Python官方二十七问,你知道个啥?

你必须记住改变程序中两个地方 -- 第二次出现隐藏在循环底部。 最好方法是使用迭代,这样能通过 for 语句来循环遍历对象。...CPython 退出时为什么不释放所有内存? 当 Python 退出时,从全局命名空间或 Python 模块引用对象并不总是被释放。...然后,你必须确保驻留在字典(或其他基于 hash 结构)中所有此类包装对象哈希值在对象位于字典(或其他结构)中时保持固定。...此函数从提供迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ......这是静态类型要点 -- 编译 总是 在编译时知道每个变量作用域。 Python 使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

2.5K20

干货 | 27 个问题,告诉你 Python 为什么如此设计?

你必须记住改变程序中两个地方 -- 第二次出现隐藏在循环底部。 最好方法是使用迭代,这样能通过 for 语句来循环遍历对象。...CPython 退出时为什么不释放所有内存? 当 Python 退出时,从全局命名空间或 Python 模块引用对象并不总是被释放。...然后,你必须确保驻留在字典(或其他基于 hash 结构)中所有此类包装对象哈希值在对象位于字典(或其他结构)中时保持固定。...此函数从提供迭代列表中创建新列表,对其进行排序并返回。例如,下面是如何迭代遍历字典并按 keys 排序: for key in sorted(mydict): ......这是静态类型要点 -- 编译 总是 在编译时知道每个变量作用域。 Python 使用动态类型。事先不可能知道在运行时引用哪个属性。可以动态地在对象中添加或删除成员属性。

2.6K20

Python入门学习(二)

1.4 内置函数 (1)fromkeys(iterable,value=None)创建并返回一个新字典,第一个参数为可迭代对象(序列类型),第二个参数是value值。 ?...比如下面要介绍对象属性初始方法——构造方法,函数名为__init__,在函数对象实例化时调用,例: ?...9.7 迭代 迭代类似循环,每次循环称为一次迭代,且本次迭代结果将作为下次迭代初始值。提供迭代操作容器成为迭代,我们所熟知序列类型和字典类型均属于迭代。...迭代内置方法位__iter__(self)和__next__(self)。前者被触发返回迭代对象,后者将初始值和后续值进行操作。...,并在需要时候从程序离开地方继续或者重新开始 生成器就是一特殊迭代,作为一个迭代,生成器必须要定义一些方法,其中一个就是__next__(),如同迭代一样,我们可以使用next()函数来获取下一个值

1.4K81
领券