欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    python_note(DOC48页).docx

    • 资源ID:1685116       资源大小:79.13KB        全文页数:48页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    python_note(DOC48页).docx

    Python婚记(配套b站视Ai使用一精简版)Python带性:解释性Python默认不支持中文python3可以解释中文先用Python3版本进行开发再用PythOn2.6,Python2.7执行交互式(脸证和学习小型或局部代码)python(3)»>1.01*36537.78exit()orcrt1.+Dipython3(支持自动补全,自动编班,支持bashshe1.1.终命令军)集成开发环境(IDE)integratedDeve1.opeentEnvironmentPyChann安装1)下找PyCharm2) tar-zxvfPyChantt-2018.1.4.tar.gz3) sudomvpycharm-2018.1.1/opt4) cd/opt/pycharm-2018.1.4/bin5) pycham.sh在欢送界面点击下边的COnfigre选择"CreateDesktopEntry">勾选"Createtheentryfora1.1users"->0K,之后可以在所有程序里找到pycharm图标,右键-添加到收我夫卸载1) sudorm-roptpycharm-2018.1.4/2) sudormr.pycharm-2018.1.4/(隐藏文件)3) catusrshare/app1.icationsjetbrains-pycharm.desktop4) rm-rusrshareappIicationsjetbrains-pycharm.desktop恢曳初始化设置rm-r.PyCharnI2019.I单行注释1) S注释命令空格内容)2) 代科空2格#注绛文字多行注春算数运算符*/(取整)%(取余*(平方)计算三大件:CP1.i内存硬盘程序要执行,首先需要加载到内存程序就是用来处理数据的变量就是用来储存数据的格式化输出先%$:string%d;int%f:f1.oat%:percentPrint(“格式化字符串"变量1,变量2D标识符和关键字标识符:字母下划线数字(不能以数字开头,不能与关键字重名,区分大小写)import可以导入一个"工具包”importkeywordprint(keyword,kw1.ist)花珠命名法DfirstNamo2)FirstName判断语句(分支语句)if:空四格(tab)在PythOn开发中,不能混,用Tabandspace!“if语句以及缩进局部的代码看成一个完整的代码块"ctr1.+/叁加单行注释遂转运算符andornotife1.ife1.seif嵌套(逐级缩进)增加和减少缩进tabshift+tab随机救:importrandom随机整数random,randint(a,b)ab之间的整数循环(whiIebreakcontinue)程序三大流程(顺序流程,分支流程(判断语句),循环流程(whi1.e)列表(有序的)关钺字元祖便利0字典的遍历Oforin遍历字典(无序的)card_1.ist=0.0forcardinfoincard1.ist:print(cardinfo)字符串:“我的外号”'我的外号是"大西瓜"str1.="he1.Iopython*forcharinstr1.:print(char)Ien(SIrI)str1.countOstr1.index()字符串操作(rn)spacestr="”字符串切片(适用于字符串列表元祖)numstr2:2:2开始,截止,步长numstr-1.-1:-1or:-1.逆序输出公共方法内置函数Ien(item)<ie1.(i1.em)max(i1)min(item)cmp(ii<mii1.item2)切片0,1,2,3,4.51.3+拼接X重复in3innotin4notinfore1.se(没有通过break退出循环,循环结束后,会执行代码)(得到一个提示)变量流程控制函数模块框架搭建(文件准备主运行循环)字符串判断pass无限循环ToDo注程可变类型不可交类型,内存中的数据不允许被修改;,数字类型int,boo1.,f1.oat,comp1.ex,1.ong(2.x),字符串str,元组tup1.e可变类里.内存中的数据可以被修改:,列表1.ist字典die可变类型的数据变化,是通过方法来实现的如果给一个可变类型的变量,蛾值了一个新的数据,引用会修改变量不再对之前的数据引用变量改为对新赋值的数据引用字典的key只能使用不可变类型的数据局部交量的生母周期 所谓生命周期就是变量从被创立到被系烧回收的过程 局部交量在函数执行时才会被创立 函数执行结束后局部变量被系烧回收 局部变量在生周期内,可以用来存储函数内部临时使用到的数据全局交量: 注泰:函数执行时,鲁要处理交量时会:1 .廿先查找函数内部是否存在指定名爵的局部变量,如果有,直接使用2 .如果没有,也找函数外部是否存在指定名眷的全局交量,如果有,直接使用3 .如果还没有,程序报错!全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个交量:在函数内部,可以通过全局变量的引用获取对应的数据但是,不允许直接修改全局变量的引用一一使用赋值语句修改全局变量的值2)在函数内部修改全局变量的值如果在函数中需要修改全局变量,需要使用g1.oba1.进行声明g1.oba1.numnum=1004)全局变量命名的建议为了防止局部变量和全局变量出现混清,在定义全局变量时,有些公司会有一些开发要求,例如:全局变量名前应该增加g_或者B1.的前缀定义函数时,是否接收介数,或者是否返回结果.是根据实际的功能雷求来决定的!1 .如果函数内部於疆的蒙*不定,就可以将外界的数据以参数传递到函数内部2 .如果希望一个函数执行完成后,向外界汇报执行结果,就可以港加函数的返回值技巧在Python中,可以将一个元蛆使用赋值语句同时取值给多个交量注意:变量的数量需要和元组中的元素数量保持一致解法2不使用临时交量口解法2-不使用临时变量a=a+bb=a-ba=a-b解法3Python专有,利用元姐a,b=b.aa.b=(b,a)(在函数内部,针对参数使用赋值语句,不会改变到外部的实际变量)问题1:在函数内揖,针对叁数使用鼠值语句,会不会影响调用函数时传递的实介交量?不会!无论传递的参数是可变还是不可交 只要针对介数使用鼠值语句,会在函数内部修改局部变量的引用,不会给响到外邮克It的引用问题2:如果传递的参数是可变类型、在函数内部,使用方法修改了数据的内容,同样会影响到外部的数据在python中.列表变量调用+=本质上是在执行列表变量的extend方法,不会修改交量的引用.(列表+合并选项)缺省参数定义函数时,可以给某个介数指定一个默认值,具方默认值的参数就叫做缺省参数 调用函数时,如果没有传入缺省介数的值,则在函数内部使用定义函数时指定的介效欺认值 函数的缺省参数,桥常见的值设置为参数的缺省值,从而倚化函数的调用 例如:对列表排序的方法(reverse=FA1.SE/TRUE) defPrint_info(name.gendor=True)缺省表达式缺省分数的点事项1)缺省参数的定义位* 必须保证带有默认值的缺看)数在介数列表末尾2)调用IiMr多个缺省参数的函数 在调用函数时,如果有多个缺省分效,雷要指定介数名,这样解释身才能够知道参数的对应关系!多值参数(知道)定义支持多值分数的函数有时可能需要一个SHk能够处理的参数个数是不确定的,这个时候,就可以使用多值分数,python中有两种多值参数: 金一名前港加一个*可以、接收元赳 参数名前消加百个*可以接收字典 一般在给多值参数命名时,习惯使用以下两个名字 *args存放元蛆参数,前面有一个* *kwargs存放字典叁数,前面有两个* args是arguments的缩写,有变量的含义 kw是keyword的缩写,kwargs可以记忆储值对数提示:多值介数的应用会经常出现在网络上一些大牛开发的框架中,知道多值参数,有利于我们能够读慎大牛的代码num=0 forninargs: num+=n元姐和字典的拆包(知道) 在调用带有多值参数的函数时,如果希望: 将一个元组变量,直接传递给args 将一个字典变量,宜接传递给kwargs 就可以使用拆包,简化参数的传递,拆包的方式是: 在元组变量前.增加一个 在字典变量前,增加两个*g1.-nums=(,3)g1.xiaoming=,name":"小明","age,:IS)demo(*g1._nums,*g1.-xiao三ing)筒化元祖和字典的传:暹归函数的特点特点:一个函数内部调用自己函数内部可以调用其他函数.当然在函数内部也可以调用自己代码带点1 .函数内部的代码是相同的,只是针时介效不同,处理的结果不同2 .当分数满足一个条件时,函数不再执行这个手常要.通常被称为递归的出口,否则会出现死循环!面向对象(OoP)根本毓念1)面相过程一怎么做?1 .把完成某一个需求的所有步歌从头到尾逐步实现2 .根据开发需求,将某些功能独立的代码封装成一个又一个函数3 .最后完成的代码,就是顺序地调用不同的函数桥点1 .注重步It与过程.不注重职责分工2 .如果得求复杂,代码会变得很复杂3 .开发在杂工程,没有固定的套路,开发难度很大I2)面向对象一谁来做?相比较函数,面向对象是更大的封建,根据职责在一个对象中封装多个方法1 .在完成某一个需求前,首先确定职责一一要做的*情(方法)2 .根据职责确定不同的对象,在对象内部封装不同的方法(多个)3 .最后完成的代码,就是项序地让不同的对象调用不冏的方法傅点1 .注重对象和取责.不同的对象承当不同的职责2 .更加适合应对复杂的需求变化,是专门应对复杂工程开发,提供的Ia定套路3 .蓍要在面向过程并础上,再学习一些面向对象的语法类类是对一群具有相同将征或者行为的事物的一个统称,是抽象的,不能直接使用 傅征被称为属性 行为被称为方法 类就相当于制造飞机时的图纸,是一个模板,是黄责创立对象的对象 对象是由类创立出来的一个具体存在,可以直接使用 由哪一个类创立出来的对象,就拥有在弟一个类中定义的: ,诔性 方法 对象就相当于用图纸制造的飞机在程序开发中,应该先有类.再有对象类和对象的关系类是模板,对象是根据类这个模板创立出来的,应该先有类,再有对象 类只有一个,而对象可以有很多个不同的对象之间属性可能会各不相同类中定义了什么属性和方法,对象中就有什么黑性和方法,不可能多,也不可能少在程序开发中,要设计一个类,通常看要满足一下三个要素:1 .类名这类事物的名字,满是大驼峰名法2 .舄性这类事物具有什么样的特征3 .方法这类事物具有什么样的行为类的命名方法:大驼峰名法CapWords1 .每一个单词的首字母大写2 .单词与单词之间没有下划或类名确实定名词提嫁法分析基个业务流程,出现的名词,通常就是找到的类属性和方法确实定对对象的抬在描述,通富可以定义成属性 对象具有的行为(动词),通用可以定义成方法提示:需求中没有涉及的属性或者方法在设计类时,不需要考虑面向对象基础语法目标,dir内置函数 定义简单的类(只包含方法) 方法中的se1.f参数 初始化方法 内置方法和属性在Python中对象几乎是无所不在的.我们之前学习的变量、数据、的数标是对象在Python中可以使用以下两个方法验证:1 .在标识符/数据后输入一个.,然后按下TABIi1.iPython会提示该对象能够调用的方法列表2 .使用内置函数dir传入标识符/数据,可以查看时象内的所有属性及方提示利用好dir函数,在学习时很多内容就不需要死记硬背了面向对象是更大的封装,在一个类中封装多个方法,这样通过这个类创立出来的对象,就可以直接调用这些方法了!在Python中要定义一个只包含方法的类,语法格式如下:c1.ass类名: def方法1 pass def方法2. pass方法的定义格式和之前学习过的函数几乎一样区别在于第一个参数必须是se1.f,大家暂时先记住,稍后介绍se1.fse1.f介It案例改造给对象增加属性 在Python中,要妙对象设置属性.非常的容易,但是不推荐使用 因为:对象属性的封装应该封装在类的内部 只需要在美的外部的代号中直接通过.设置一个属性印可注意:这种方式虽然简单.但是不推荐使用!使用se1.f在方法内部输出每一只卷的名字由弟一个对象调用的方法,方法内的se1.f就是萼一个对象的引用 在类封装的方法内部,se1.f就表示当前调用方法的对象自己 调用方法时,程序员不需要传递se1.f参数 在方法内部 可以通过se1.f.访问对象的属性 也可以通过se1.f,调用其他的对象方法在类的外部,通过交量名.访问对象的属性和方法 在类封装的方法中,通过se1.f.访问时象的属性和方法提示 在日常开发中,不推荐在类的外部绐对象增加属性 如果在运行时,没有找到属性,程序会报错 对象应该包含有哪些属性,应该封集在美的内部初始化方法 当使用类名0创立对象叶,会自动执行以下操作:1 .为对象在内存中分IS空网一一创立对象2 .为对象的属性设置初始值一一初始化方法(init)这个初始化方法就是init方法,init是对象的内置方法方法是专门用来定义一个类具有寿些属性的方法!在初始化方法内部定义属性 在_init_方法内部使用se1.f.属性名=属性的初始值就可以定义属性 定义属性之后,再使用Ca1.类创立的时象,都会棚有该显性改造初始化方法一一初始化的同时设置初始值 在开发中,如果希望在创立对象的冏时,就设置对象的属性,可以对_init_方法进行改造1 .把希望设置的属性值,定义成init方法的参数2 .在方法内部使用se1.f.属性=形参接收外部传递的参数3 .在创立对象时,使用类名(属性1.属性2.一)调用内置方法和属性序号I方法名类型I作用IO1.de1.I方法对象被从内存中销毁前.会被自动调用02I_str_I方法返回对象的描述信息print函数输出使用_de1._方漆(知道),在Python中 当使用类名0创立对象时,为对象分配完空向后,自动调用_init_方法 当一个对象被从内存中销毁前,会自动调用_de1._方法 应用场景 Jnit_改造初始化方法,可以让创立对象更加灵活_de1._如果希望在对象被销毁前,再做1.些事情,可以考虑一下_de1._方法 生周期 一个时象从调用类名0创立,生命周期开始 一个对象的de1.方法一旦被调用,生命周期结束 在对象的生命周期内,可以访问对家属性,或者让对象调用方法_str_方法 在Python中,使用print输出对象变量.跳认情况下,会输出这个变量引用的对象是由一个类创立的对象,以及在内存中的地址(十六进铜表示) 如果在开发中,希望使用print输出对象变量时.能够打向自定义的内容,就可以利用str这个内置方法了 .£«:_str方法必须返回一个字符串目标 封袋 小明爱跑步 存放家具封装1 .封装是面向对型编程的一大特点2 .面向对象编程的第一步将属性和方法封装到一个抽象的类中3 .外界使用类创立对象.然后让对象调用方法4 .对象方法的细节都被封装在类的内部SeIf.属性=形参提示:在对象的方法内部,是可以直接访问对象的属性的!提示1 .在对象的方法内部,是可以直接访问对象的属性的2 .同一个类创立的多个对象之间,舄性互不干扰!思旁:应该先开发哪一个类?答案猊具类1 .家具简单2 .房子要使用到家具,被使用的类,通常应该先开发小结 主程序只负贲创立房子对象和家具对象 让房子对象调用add_item方法将家具添加到房子中 面积计算.剩余面积.家具列表等处理都祓封装到房子类的内部目标 士兵突击案例 身份运算符封装1 .封装是面向对象编程的一大特点2 .面向时象编程的第一步一一将属性和方法封装到一个抽象的类中3 .外界使用类创立对象.然后让对象调用方法4 .对象方法的细节都被封装在类的内部一个时象的属性可以是另外一个类创立的对象假设:每一个新兵都没有枪定义没有初始值的属性在定义国性时,如果不知道设置什么初始值,可以设置为None None关健宇表示什么都没有 表示一个空对蠹.没有方法和属性,是一个杵殊的常量 可以将None贼值给任何一个变量fire方法鲁求 1判断是否有枪,没有枪没法冲锋 2喊一声口号 3装填子弹,4射击小结1 .创立了一个士兵类.使用到_init_内置方法2 .在定义属性时,如果不知道设置什么初始值,可以设置为None3 .在封装的方法内部,还可以让自己的使用其他类创立的对家属性调用巴运封装好的方法is与=区别:is用于判断两个变量引用对象是否为同一个(id信息)二用于判断引用交量的值是否相等私有属性和私有方法在实际开发中,对象的某些属性或方法可能只希望在对象的内部被使用,而不希望在外部被访问到 私有属性就是对象不希望公开的属性 私有方法就是对象不希望公开的方法定义方式 在定义属性或方法时,在属性名或者方法名前增加两个下划线,定义的就是私有属 性或方法私有属性.外防不能直接访问在时象的方法内部.是可以访问对象的私有方法提示:在日常开发中,不要使用这种方式,访问对象的私有属性或私有方法Python中,并没有真正哀义的私有 在给属性、方法命名时.实际是对名需做了一些特殊处理,使得外界无法访问到 处理方式:在名眷前面加上类名=>类名名称print(xiaofang._Women_age)xiaofang.WomensecretO继承目标 单继承 多继承面向对象三大朴性1 .封装根据职责将属性和方法封装到一个抽象的类中2 .继承实现代码的用.相同的代码不需要重复的编写3 .多态不同的对象调用相同的方法,产生不同的执行结果,中加代码的灵活度目标单继承多继承面向对象三大种性1 .封装根据职责将属性和方法封装到一个抽象的类中2 .继承实现代码的重用,相同的代码不需要重复的编写3 .多杰不同的对里调用相同的方法,产生不同的执行结果,审加代号的灵活度1)继承的语法c1.ass美名(父无名):pass 子类继承自父类,可以直接享受父类中巳经封袋好的方法,不需要再次开发 子类中应该根据职责,封装子类种有的属性和方法2)专业术语,Dog类是Anima1.类的子类,Anima1.类是Bog类的父类,Dog类从Anima1.类维承,Dog类是Anima1.类的派生类,Anima1.类是Dog类的基类,DOg类从Anima1.类派生3)继承的传递性 C类从B类维承,B类又从A类继承 那么C类就具有B类和A类的所有屏性和方法子类拥有父类以及父类的父类中封装的所有属性和方法方法的重写 子类拥有父类的所有方法和属性 子类继承自父类,可以直接享受父类中巳经封装好的方法,不需要再次开发应用场景 当父类的方法实现不能满足子类需求叶,可以对方法遂行,写(override) :写父类方法有两种情况:1 .XM父类的方法2 .君父类方法进行扩展1) IU1.父类的方法 如枭在开发中,父类的方法实现和子类的方漆实现,完全不同 就可以使用««的方式,在子类中重新编写父类的方法实现具体的实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现篁写之后,在运行时,只会调用于类中直写的方法,而不再会调用父类轴装的方法2)对父类方法进行扩展 如果在开发中,子类的方法实现中包含父类的方法实现 父类原本封装的方法实现是子类方法的一局部就可以使用扩晨的方式 .在子类中重写父类的方法 在需一的位置使用SUDerO.父类方法来调用父类方法的执行 代码其他的位置针对子类的君求,编写于类榜有的代码实现关于super,在Python中super是一个钟殊的类 super()就是使用super类创立出来的对象 最富使用的场景就是在写父类方法时.调用在父类中封装的方法实现调用父类方法的另外一种方式(知遒)在Python2.x时,如果需要调用父类的方法,还可以使用以下方式:父类名.方法(Se1.f) 这种方式,目前在Python3.x还支持这种方式 这种方法不推荐使用.因为一旦父类发生变化,方法调用位置的类名同样需要修改提示 在开发时,父类名和superO两种方式不要混用 如果使用当前子类名调用方法,会形成递归调用,出现死循环父类的私有属性和私有方法1 .子类对象不能在自己的方法内部,直接访问父类的私有属性或私有方深2 .子类对象可以通过父类的公有方法同接访问到私有属性或私有方法私有属性、方法是对象的隐私,不对外公开,外界以及子类都不能直接访问私有属性、方法通常用于做一些内部的事情B的对象不能直接访问_num2展性,B的对象不能在demo方法内访问num2显性 B的对象可以在demo方法内,调用父类的test方法 父类的test方法内部,能镑访问_num2属性和_test方法多继承概念 子类可以拥有多个父类,并且具有所有父类的属性和方法 例如:孩子会继承自己父亲和母亲的语法c1.ass子类名(父之11.父芝12.) pass问题的提出? 如果不同的父类中存在同名的方法.子类对象在调用方法时,会调用算一个父类中的方法呢?提示:开发时,应该尽量防止这种容易产生混淆的情况!一一如果父类之间存在同名的属性或者方法,应该尽量防止使用多继承Python中的MRO方法搜索*序(知道) Python中针对类提供了一个内属性_mro_可以查看方法搜索顺序,MRO是methodreso1.utionorder,主要用于在多维承时判断方法、JI性的调用庵径print(C._IBrO_)在搜索方法时,是按照_mro的输出结果从左至右的顺序查找的如果在当前类中找到方法,就直接执行,不再搜索如果没有找到,就杳找下一个类中是否有讨应的方法,如果找到,就直接执行,不再搜索如果找到最后一个类,还没有找到方法,程序报错新式类与旧式(经典)类object是Python为所有对象提供的井类,提供有一些内置的属性和方法,可以使用dir函数查看. 较典类:不以object为基类的类,不推荐使用 新式类:以object为基类的类,推荐使用 在Python3.X中定义类时,如果没有指定父类,会默认使用object作为该类的冬类一一Python3.x中定义的类都是新式类 在Python2.x中定义类时,如果没有指定父类,则不会以ObjeCt作为并类目标 多态面向对象三大椅性1.封装根据职责将属性和方法封装到一个抽象的类中定义类的准则2.继承实现代码的用,相同的代码不需要重复的编写设计类的技巧子类针对自己特有的需求,编写特定的代码3.多态不同的子类对象调用相同的父类方法,产生不同的执行结果 多态可以中加代码的灵活度 以继承和重写父类方法为前提 是调用方法的技巧,不会影晌到类的内部设计类属性和类方法目标 美的结构 类属性和实例属性 爱方法和仲态方法类的结构术语一实例1 .使用面相对象开发,第1步是设计类2 .使用类名O创立对象,创立对象的动作有两步:1)在内存中为对象分配空间-2)调用初始化方法init为对象初始化3.对象创立后,内杳中就有了一个对象的实实在崔的存在一一实例因此,通常也会把:1 .创立出来的对象叫做类的实例2 .创立对象的动作叫做实例化3 .对象的属性叫做实例属性4 .对象调用的方法叫做实例方法在程序执行时:1 .对象各自拥有自己的实例属性2 .调用对象方法,可以通过se1.f.访问自己的属性谓用自己的方法结论每一个对象都有自己独立的内存空间,保存各自不同的属性多个对象的方法,在内存中只有一份,在调用方法时,春要把对象的引用传递到方法内部类是一个林殊的对靠PythOn中一切W1.对象:,c1.assA:定义的类晨于类对宗obj1.=A()属于实例对象 在程序运行时.类同样会被加就到内存 在Python中,类是一个特殊的对象一一类对象 在程序运行时,类对象在内存中只有一份,使用一个类可以创立出很多个对象实例 除了封装实例的属性和方法外类对象还可以拥有自己的属性和方法1 .类属性2 .类方法 通过类名.的方式可以访问类的属性或者调用类的方法类属性和实例属性播念和使用 类属性就是给类对象中定义的属性 通常用来记录与这个类相关的特征类属性不会用于汜录具体对象的朴征例如求 定义一个工具类 每件工具梆有自己的name 普求知道使用这个类,创立了多少个工具对象属性的获取机制(科IB Python中属性的获取在向上杳找机制因此,要访问类属性有两种方式:1 .类名.类属性2 .对象.类J1.性(不推荐)如果使用对象.类属性=值赋值语句,只会对象淳巾»一个属性,而不会影晌到MA性的值类方法和僧态方法3.1美方法 类属性就是针对类对氟定义的属性 使用就值语句在CIaSS关键字下方可以定义类属性 类属性用于记录与这个类相关的特征 类方法就是针对类对象定义的方法 在美方法内部可以直接访问类属性或者调用其他的类方法c1.assnethod,def类方法名Is:,pass类方法需要用修饰盘配IaSSmethOd来标识,告诉解科鑫这是一个类方法 类方法的第一个数应该是cis 由哪一个类调用的方法,方法内的C1.s就是哪一个类的引用 这个参数和实例方法的第一个参数是se1.f类似 提示使用其他名称也可以,不过习惯使用cis1 .通过类名.调用类方法,调用方法时,不富要传递cis参数2 .在方法内部可以通过cis.访问类的属性也可以通过cis.调用其他的类方深在类方法内部,可以直接使用Ch访问类属性或电调用类方法3.2 A杰方法 在开发时,如果需要在类中封装一个方法,这个方法: 既不曾要访问实例属性或者调用实例方法 也不需要访问类属性或者调用类方法 这个时候,可以把这个方法封装成一个A态方法 def静杰方法名i: passA态方法密要用修饰界StatiCInethOd未标识,告诉第鼻森这是一个伊态方法 逋过类名.调用A态方法3.3 方法殊合案例詈求1 .设计一个Game类2 .窿性:,定义一个类属性top_score记录游戏的历史最高分,定义一个实例晨性p1.ayername记录当*游戏的玩家姓名3 .方法: A态方法showhe1.p显示游戏帮助信息 类方法ShOWJoP_SCore显示历史最高分 实例方法S1.ar1.game开始当前玩家的游戏4 .主程序步取 1)查看帮助信息 2)查看历史最高分 3)创立游戏对象,开始游戏案例小结1 .实例方法方法内部需要访问实例属性实例方法内部可以使用类名.访问类属性2 .类方法一一方法内部只舒要访问类属性3 .A态方法方法内部,不需要访问实例属性和类属性提问如果方法内部即斋要访问实例属性.又需要访问类属性,应该定义成什么方法?答案应该定义实例方法因为,类只有一个.在实例方法内部可以使用类名.访问类属性单例目标 单例设计模式 _new_方法 Python中的单例01.单例设计模式 设计模式 设计模式是首人工作的总龄和提焦,通常,被人们广泛流传的设计模式都是针对某一代定问题的成熟的解决方案 使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可隼性 单例设计模式 目的一一让类创立的对象,在系统中只有唯一的一个实例 每一次执行类名。返回的时里.内存地址是相同的02._new_方法使用美名0创立对象时,Python的解释器首先会调用_new_方法为对象分配空间_new_是一个由ObjeC1.基类提供的内置的伸态方法,主要作用有两个:-1)在内存中为对象分配空间2)返回对象的引用 Python的解释器获得对象的引用后,将引用作为第一个参数,传递给_init_方法重写new方法的代码非常固定! 重写new方法一定要returnsuper()._new_(cis) 否则Python的解释器得不到分配了空间的对象引用,就不会调用对象的初始化方法 注需:_new_是一个静态方法,在调用时需要主动传递cis参数03.Python中的单例 单例让类创立的酎象.在系统中只有唯一的一个实例1 .定义一个类属性.初始值是None,用于记录单例对象的引用2 .重写_new_方法3 .如果类属性i$None,调用父类方法分配空间,并在类属性中记录结果4 .返回类属性中记录的对象引用只执行一次初始化工作 在每次使用类名0创立对象时,Python的解释器都会自动调用两个方法:,_new_分配空间 _init_对象初始化 在上一小节对_new_方法改造之后,每次都会得到第一次被创立对象的引用 但是:初始化方法还会被再次调用 求 让初始化动作只被执行一次解决方法1 .定义一个类属性NiJf1.ag标记是否执行过初始化动作,初始值为Fa1.se2 .在init_方法中,判断init_f1.ag,如果为Fa1.se就执行初始化动作3 .然后将initf1.ag设置为True4 .这样,再次自动调用_Jnit_方法时,初始化动作就不会被再次执行了异常目标 异常的概念 捕获异常 异常的传递 批出异常01.异常的概念程序在运行时,如果PyIhOn解暮器遇到到一个错误,会停止程序的执行,并且提示一些帽蝶佶息,这就是异常程序停止执行并且提示号谀信息这个动作,我们通常称之为:揪出(raise)异常程序开发时,很难将所*的抬殊情况都处理的面面俱到,通过界常捕获可以针对突发事件做臬中的处理,从而保证程序的稳定性和健壮性02.捕获异常2.1 I1.单的捕获异常语法在程序开发中,如果对某些代号的执行不能确定是否正确,可以增加try(先试)来城获异常捕获异常最简单的语法格式:try:尝试执行的代码except:出现错误的处理try娑试.下方编写要尝试代码,不确定是否能够正常执行的代码except如果不是.下方编写尝试失败的代码2.2 借谀类型捕获 在程序执行时,可能会遇到不同类型的异常.并且需要针对不同类型的异常,做出不同的晌应.这个时候,就需要捕获错误类型了 语法如下:try: »尝试执行的代码,pass,except错i吴类型: -¾1.对应的代码处理.pass except(错误类型2,错误类型:): #it'.½S2和3,X工码处理 pass exceptExceptionasresu1.t: print("天初错误%s"%resu1.t)当Python解释器抛出异常时,最后一行看误信息的第一个单词,就是号误类型捕萩未知傍误 在开发时.要5(判到所有可能出现的错误,还是有一定难度的 如果希望程序无论出现任何告U1.都不会因为Python解释器揪出异常而被终止.可以再增加一个except,exceptExceptionasresu1.t: print("¾iui?%s"%resu1.t)2.3 异常捕获完英语法在实际开发中,为了能够处理复杂的异常情况,完整的异常语法如下:提示:有关完整语法的应用场景,在后续学习中,结合实际的案例会更好理解现在先对这个语法结构有个R象即可e1.se只有在没有异常时才会执行的代码 fina1.1.y无论是否有异常,都会执行的代码03.界富的传递 异常的传建一一当函数/方法执行出现异常.会将异常传建给函数/方法的调用一方 如果传递到主程序,仍然没有异常处理,程序才会被终止根示 在开发中,可以在主函数中消加异常捕获 而在主函数中调用的其他函数,只要出现异常,都会传递到主函数的异常捕萩中 这样就不需要在代码中,增加大量的鼻常挽获,能够保证代码的整洁04.抛出raise异常4.1 应用场景 在开发中,除了代码执行出看Python解释器会搀出异常之外 还可以根据应用程序轿有的业务需求主动蜒出畀*例如 提示用户输入密码.如果长度少于8,她出异常注怠 当前函数只负责提示用户输入密码,如果密码长度不正确,要其他的函数进行族外处理 因比可以盘出异常,由其他需要处理的函数捕获异常4.2 抛出异常Python中提供了一个Exception界富类在开发时,如果满足”定业务求时,希望抛出鼻常,可以:1 .创立一个Exception的对象2 .使用raise关健字抛出异常对泉模块和包

    注意事项

    本文(python_note(DOC48页).docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开