python 迭代器的方法_python--魔法方法,属性和迭代器
一、构造方法:使用双下划线例如__init__。当一个对象被创建后,会立即调用构造方法。
1、创建构造方法:
def __init__(self):创建构造方法。
往构造方法中传入多个参数:
2、重写一般方法和构造方法:
1、重写一般方法:B类继承了A类,继承了A类的hello方法。
程序运行结果:
怎么重写子类B类的方法呢?
程序运行结果:
2、重写构造方法:
以下代码Bird类定义了鸟的eat方法,SongBird类继承了Bird类,重写了__init__构造方法,且定义了sing方法。。
程序运行结果:sb.eat()报错:SongBird没有hungry特性。那是因为在SongBird类中构造方法被重新,新的构造方法中没有关于初始化hungry特性。
3、调用未绑定的超类的构造方法python旧版本:解决sb.eat()报错的问题。
以下代码:Bird.__init__(self):调用超类的构造方法。
代码运行结果:
4、使用super函数:super函数时新式类中的新函数,当前类和对象可以作为super函数的参数使用,调用函数返回的对象的任何方法都是调用超类的方法。
以下代码:super(SongBird,self).__init__():使用super函数将当前的SongBird类和对象作为参数,返回调用超类的__init__构造方法。使SongBird具有超类Bird的hungry特性。
程序运行结果:
5、成员访问(基本的序列和映射规则)
1、__len__(self):返回集合中所有项目的数量。
2、__getitem__(self,key):返回所给键对应的值。
3、__setitem__(self,key,value):按一定的方式存储和key相关的value。
4、__delitem__(self,key):对一部分对象使用del语句时被调用,同时必须删除和键相关的键。
以下代码:实现了一个算数序列,每个元素都比前一个元素大1。
checkIndex(key)函数:检查所给的键是不是正常的索引,如果不是整数则引发TypeError异常,如果小于0则引发IndexError异常。
__init__(self,start=0,step=1):构造方法初始化。
__getitem__(self,key):获取给定key的值。
__getitem__(self,key,value):重新保存更改后的值。
运行程序:
s=ArithmeticSequence(1,2):定义一个s对象,start=1,step=2
s=[4]:调用__getitem__方法,等价于__getitem__(s,4),计算self.start+key*self.step=1+4*2=9
s[4]=2:调用__setitem__方法,等价于__setitem__(s,4,2),保存修改值self.changed[4]=2将2赋值给序列key4的位置。
6、子列化列表,字典和字符串:
以下代码子列化列表:
代码运行结果:
每次调用__getitem__方法获取键值时,counter自增1。
7、属性:通过访问器定义的特性。
1、property函数:通过访问器函数用作参数(先取值,再赋值)创建属性。
程序运行结果:
2、静态方法和类成员方法:
静态方法:定义没有self参数,且能够被自身类直接调用。
类成员方法:需要cls参数,可以直接用类的具体对象调用。
使用装饰器@staticmethod表示这个方法是个静态方法。
使用装饰器@classmethod表示这个方法是个类方法。
如下代码分别创建一个静态方法与类方法:
程序运行结果:
3、__getattr__、__setattr__:
作用:在访问特性时可以执行代码。
1、__getattribute__(self,name):当特性name被访问时自动被调用(只能在新式类中使用)。
2、__getattr__(self,name):当特性name被访问且对象没有相应特性时被自动调用。
3、__setattr__(self,name,value):试图给name特性赋值时被自动调用。
4、__delattr__(self,name):试图删除特性name时被自动调用。
以下代码:__setattr__方法:如果属性是size则将value值赋值给width与height,如果属性不是size则使用__dict__方法代替普通的特性赋值操作。防止死循环。
代码运行结果:
4、迭代器:__iter__返回一个迭代器,迭代器就是具有next方法的对象。
1、 如下代码通过迭代器,返回斐波那契数列。
当fibs=Fibs()生成类的实例时,__init__初始化构造方法被调用,此时实例fibs中有两个变量fibs.a=0,fibs.b=1。
for f in fibs:表示迭代fibs,赋值给变量f,每次迭代都会自动执行fibs的next方法:fibs.a=fibs.b,fibs.b=fibs.a+fibs.b,然后返回fibs.a。赋值给f。
设置了break语句:当找到大于10的数后打印,停止循环。
2、內建函数iter可以从可迭代的对象中获得迭代器。
3、从迭代器中获得序列:通过list构造方法显示的将迭代器转换为列表。
5、生成器:
任何包含yield语句的函数称为生成器。yield功能类似于return,但不同的是它返回的是一个生成器。
生成器并不会一次返回所有结果,而是每次遇到yield关键字后返回相应的结果,并保留函数的当前运行状态,等待下一次调用。
由于生成器也是一个迭代器,那么它就支持next方法
1、创建生成器:
如下代码:定义一个生成器,按顺序打印出列表的数字。
2、递归生成器:
如下代码:外层try,except语句:如果函数被告知展开一个元素,引发TypeError异常,生成器产生一个元素。如果函数被告知展开一个列表,则会执行内层的try语句。
内层try,except语句:将传入的对象与一个字符串拼接,看看会不会引发TypeError异常。如果引发则忽略。如果没有引发则else语句会引发自己的TypeError异常。就会按for循环执行。
程序执行结果:
3、生成器方法:
1、send方法:可以接收外部传的变量,并根据变量计算结果后返回。send方法必须在生成器被挂起后才能使用。
2、next方法:应为生成器本身就是一个迭代器,因此具有next方法。
程序运行结果:
3、close方法:手动关闭生成器,后面的调用会直接返回StopIteration异常。
4、throw方法:用来向生成器送入一个异常,可以结束系统定义的异常,或者自定义的异常。
throw后直接跑出异常并结束程序,或者消耗掉一个yield,或者在没有下一个yield的时候直接进行到程序的结尾。
程序运行结果:
4、模拟生成器:使用普通的函数模拟生成器:
5、八皇后问题:
定义冲突函数conflict,state参数:是个元组,已知皇后的位置,nextX参数:下一个皇后的水平位置。nextY=len(state):将已有皇后位置的长度赋值给下一个皇后的垂直位置。abs(state[i]-nextX)=0:表示下一个皇后与正在考虑的前一个皇后的水平距离为0(列相同)。abs(state[i]-nextX)=nextY-i:表示在同一对角线上。
定义queens函数:num:皇后总数,state=():皇后的位置。if len(state)==num-1:判断当前的皇后是否是最后一个,是则用生成器的方式返回该皇后的位置。for result in queens(num,state+(pos,)):如果不是最后一个皇后,则返回该皇后的位置并为后面的皇后提供当前皇后的每种合法的位置信息。
打印皇后位置
程序运行结果:
python 迭代器的方法_python--魔法方法,属性和迭代器相关推荐
- python __reduce__魔法方法_Python魔法方法指南
(译)Python魔法方法指南 简介 本指南归纳于我的几个月的博客,主题是 魔法方法 . 什么是魔法方法呢?它们在面向对象的Python的处处皆是.它们是一些可以让你对类添加"魔法" ...
- python魔法方法_Python魔法方法指南
有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...
- python构造和析构_python魔法方法 构造和析构实例讲解
目录: 一._ _init_ _(self[, ...]) 二._ _new_ _(cls[, ...]) 三._ _del_ _(self) 四.课时41课后习题及答案 说的那么厉害,那什么是魔法方 ...
- python魔法方法和普通方法_Python魔法方法之属性访问详解!
练习要求: 写一个矩形类,默认有宽和高两个属性. 如果为一个叫square的属性赋值赋值,那么说明这是一个正方形,值就是正方形的边长,此时宽和高都应该等于边长. 技术分析 我们先来看看有关于属性的四个 ...
- python contains魔法方法_python魔法方法
Python 魔术方法指南 入门 构造和初始化 构造定制类用于比较的魔术方法 用于数值处理的魔术方法 表现你的类 控制属性访问 创建定制序列 反射 可以调用的对象 会话管理器 创建描述器对象 持久化对 ...
- python contains魔法方法_Python魔法方法详解
据说,Python 的对象天生拥有一些神奇的方法,它们总被双下划线所包围,他们是面向对象的 Python 的一切. 他们是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个, ...
- python魔法方法_Python魔法方法
魔法方法 含义 基本的魔法方法 __new__(cls[, ...]) 1. __new__ 是在一个对象实例化的时候所调用的第一个方法 2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __ ...
- python getattribute方法_python魔法方法 _getattr_ 和 __getattribute__
python的easyDict库,是一个属性调用友好库 python中对象属性的获取链 在使用obj.value时,python内部执行顺序如下: obj.value等价于getattr(obj,'v ...
- python 魔法方法常用_Python魔法方法指南
有很多人说学习Python基础之后不知道干什么,不管你是从w3c还是从廖雪峰的教程学习的,这些教程都有一个特点:只能引你快速入门,但是有关于Python的很多基础内容这些教程中都没介绍,而这些你没学习 ...
- python整形魔法_python 魔法方法
1.什么是魔法方法? 魔法方法就是可以给你的类增加魔力的特殊方法,如果你的对象实现(重载)了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,你可以定义自己想要的行为,而这一 ...
最新文章
- 彻底理解 Cookie,Session,Token
- RocketMQ工作原理 高级功能介绍
- Raspberry Pi 4B 部署 YOLOX
- Java黑皮书课后题第9章:*9.10(代数:二次方程式)为二次方程式设计一个名为QuadraticEquation的类
- drf 解析器,响应器,路由控制
- [解读REST] 3.基于网络应用的架构
- 在使用apt-get update 时更行列表,显示[Connecting to archive.ubuntu.com (2001:67c:1360:8001::21)]超时
- Istio从懵圈到熟练 – 二分之一活的微服务
- LiveWallPaper 让您的壁纸动起来 连载(三)——OpenGL ES特辑
- 大数据之-Hadoop之HDFS_NameNode故障处理_NameNode元数据恢复_案例---大数据之hadoop工作笔记0073
- BIGEMAP地图下载器优势对比(水经注)
- 网站采集软件,全自动网站文章采集器,一键网页数据抓取
- linux ftp命令大全,linux ftp命令详解
- 可靠性 可用性 可维护性
- 常用设计模式系列(十)—装饰者模式
- 21种情况下千万别喝茶水
- 北京大学计算机学院,官宣首任院长
- 如何让自己时刻冷静的方法_情绪激动时如何冷静下来?教你4招很管用
- docke的基础入门
- 华为最新鸿蒙消息,华为鸿蒙系统最新消息,华为鸿蒙系统2021
热门文章
- Exchange2003部署与管理体系结构
- 春晚魔术,醉翁之意不在酒
- 解读IBM存储虚拟化的两大法宝
- Whidbey——C#前瞻
- C++自带排序函数sort( )
- Unity 性能优化经验整理
- 编辑器输入中文怎么整_微软证实:Windows 10五月更新中输入法有问题
- python编一个答题程序_从0到1使用python开发一个半自动答题小程序的实现
- mro python_一窥Python中MRO排序原理
- pyjion python3.6_Pyjion的代码质量一例 [20160221]