面向对象python详细教程,python既支持面向过程,也支持面向对象

  面向对象python详细教程,python既支持面向过程,也支持面向对象

  Yyds干货库存

  Python文件操作和面向对象1。文件备份案例1,示例代码# 1,接收用户输入文件名(要备份的文件名)oldname=input(请输入要备份的文件名:)# python.txt# 2,规划备份文件名(python[ backup ]。txt)# Search index=oldname.rfind( . )#返回文件名和文件后缀name=old name[:index]postfix=old name[index:]newname=name [Backup] postfix # 3,备份文件old _ f=open(旧名称, Rb) new _ f=open (newname,Wb)#读取源文件的内容并写入新文件,同时为true:content=old _ f . Read(1024)iflen(content)==0:break new _ f . write(content)# 4,关闭文件old_f.close()new_f 缺漏补缺遗留问题:我们要备份的文件名称都是用户通过输入法输入的,但是一定要记住,只要程序中有人输入,强烈建议检查用户输入的数据。

  所有用户的输入都不靠谱!

  解决用户输入异常文件名的问题:

  # 1、接收用户输入的文件名(要备份的文件名),oldname=input(请输入要备份的文件名:)# python.txt# 2、计划备份文件名(python[ backup ]。txt)#搜索点编号index=oldname.rfind( . )#判断索引,判断(index 0)是否合理index 0: #返回文件名和文件后缀name=旧名称[:index] postfix=旧名称[index:]newname=name [Backup] postfix # 3,备份文件old _ f=open(旧名称, Rb) new _ f=open (newname, Wb) #读取源文件的内容并在true时写入新文件:content=old _ f . Read(1024)iflen(content)==0:break new _ f . write(content)# 4、关闭文件old _ f . close()new _ f . close()Else:print(请输入正确的文件名,否则无法进行备份操作. )二。文件和文件夹操作1。Python中os模块对文件和文件夹的操作依赖于os模块中的相关函数。具体步骤如下:

  步骤1:导入操作系统模块

  导入步骤2:调用os模块中的相关方法。

  Os。函数名()2。与文件操作相关的方法号函数1os.rename(目标文件名,新文件名)重命名文件2os.remove(要删除的文件名)删除文件。操作案例:将python项目目录下的python.txt文件重命名为linux.txt,休眠20s,刷新后检查效果,然后删除文件。

  #步骤1:导入os模块导入os#步骤3:导入时间模块导入时间#步骤2:使用os.rename方法重命名python . txt OS . Rename( python . txt , linux.txt) #步骤4:休眠20stime.sleep(20)#步骤5:删除文件(linux

  导入操作系统相关方法:

  编号函数1os.mkdir(新文件夹名)创建指定名称的文件夹2os.getcwd()当前工作目录,获取当前目录名3os.chdir(更改目录),更改目录4os.listdir(目标目录)获取指定目录下的文件信息,返回列表5os.rmdir(目标目录)删除指定名称的空文件夹。案例1

  #导入os模块导入os# 1、创建一个images文件夹# OS . mkdir( images )# OS . mkdir( images/avatar )# 2、getcwd=获取当前工作目录print (os.getcwd ()) # 3、os.chdir,Ch=change dir=directory change directory OS . chdir( images/avatar )print(OS . getcwd())#更改到上一个目录=imageos.chdir(././) print (os.getcwd ()) # 4、使用os.listdir打印当前目录下的所有文件,返回列表print(os.listdir())# 5、删除空目录os.rmdir(images/avatar )。案例二:准备一个静态文件夹和三个文件:file1.txt、file2.txt和file3.txt。

  在程序中,将当前目录切换到静态文件夹。

  创建新的图像文件夹和测试文件夹。

  获取目录中的所有文件。

  移除测试文件夹。

  # Import os模块导入os# 在程序中,将当前目录切换到静态文件夹OS . chdir( static )# Print(OS . getcwd())#新建images文件夹和测试文件夹# OS . mkdir( images )# OS . mkdir( test )#获取目录中的所有文件# Print(OS . listdir())for file In OS . listdir():Print(file)#删除测试文件夹os.rmdir(test)4 .删除和补充文件夹(递归删除,小心!)# import shuttil模块import shuttl #递归删除非空目录shutil.rmtree(删除文件夹的路径)递归删除文件夹的原理:理论上,在删除的过程中,如果文件夹非空,会自动切换到文件夹内部,然后逐个删除其中的文件。当所有文件被删除后,它将返回到上一个目录并删除文件夹本身。

  5.小知识普及路径的绝对路径:

  d:\ pycharmprojects \ python project \静态相对路径:

  同级的路径都在同一个文件夹里,是兄弟。比如静态目录中有file1.txt和file2.txt,那么file1.txt和file2.txt就是同级关系。==直接使用名称进行对等访问==。

  下一级路径,本档案与另一个档案有上下级关系。例如,如果在images文件夹中有一个avatar文件夹,那么images是上级目录,avatar是下级目录。==然后我们可以通过图片访问头像/头像==。

  上一级的路径,如果在某个时候,我们从当前目录跳转到上一级的路径,我们可以用==./==才能实现。

  三。文件操作综合案例1。需求分析需求:批量修改文件名,可以添加或删除指定的字符串。

  步骤:

  (1)设置添加的删除字符串的ID。

  获取指定目录下的所有文件。

  在原始文件名中添加/删除指定的字符串,并构造一个新名称。

   os.rename()重命名

  2.写示例代码# 1,导入os模块导入os# 2,定义一个要重命名的目录path=static# 3,在上面指定的目录下切换到os.chdir(path)# 5,定义一个标识符确认是添加还是删除字符flag=int(input(请输入要执行的操作(1-添加字符,2-删除字符):)# 4。遍历目录中的所有文件,对于os.listdir()中的文件,output=OS . listdir():# 5。判断我们要做什么(1-添加字符,2-删除字符)如果flag==1:# 01 . txt=python-01 . txt Newname= python- file # rename操作os.rename(file,Newname) print(文件批量重命名成功)elif flag==2:# python-01 . txt=01 . txt index=len( python-)Newname=file[index:]# rename操作os.rename(file,Newname) print(文件批量重命名成功)else)四。面向对象编程思想1。传统的面向过程的编程思想是什么?总结起来就是八个字3354==从上到下,逐步细化!==

  描述从开始到结束连续“逐步”实现的功能。

  依次逐步完成这些步骤。如果某个步骤比较难,可以再细化成几个子步骤,以此类推,直到最后得到想要的结果。

  就是把要开发的系统分解成几个步骤,每个步骤就是一个功能。当所有步骤完成后,系统就开发好了!

  比如栗子:传智教育可以通过哪些步骤报名学习?开始学生申请注册,提供相关材料学生缴纳学费,领取缴费凭证教师凭学生缴费凭证分班班级增加学生信息结束所谓面签流程,也就是依次进行上面分析的步骤即可!

  2.什么是面向对象思维:上面整个注册过程有哪些动词?

  提议,提供,支付,获得,分配,增加

  有动词就要有实体来实现这个动作!

  所谓模拟真实世界,就是让计算机编程语言在求解相关业务逻辑时,与真实业务逻辑的发生保持一致。要让每一个动作都有一个支配该动作的实体(主体)发生,因为在现实世界中,任何功能的实现都可以看作是一个实体发挥各自的“功能”(能力),在内部进行协调有序的调用过程!

  3.举个栗子:用面向对象实现报名系统的开发。第一步:分析哪些动作是哪些实体和学生申请注册的。

  学生提供相关信息。

  学生付款

  机构收费

  老师分配教室。

  向班级添加学生信息。

  于是,在整个过程中,有四个实体:学生、机构、老师、班级!现实中的一个具体实体在计算机编程中是一个==对象==!

  第二步:定义这些实体,并为其添加相应的属性和功能属性,即实体固有的一些特征信息。在面向对象的术语中,属性是以前的变量。

  例如

  一个人的属性有:身高、体重、三围、姓名、年龄、学历、电话号码、籍贯、毕业学校等。

  手机的属性有:价格、品牌、操作系统、颜色、尺寸等。

  功能是一个实体能够完成的动作。在面向对象的术语中,函数被封装到一个函数或方法中。

  第三步:让实体执行相应的功能或动作。学生申请注册。

  学生提供相关信息。

  教师注册学生信息

  学生付款

  机构收费

  老师分配教室。

  向班级添加学生信息。

  4.在面向对象编程思想移植之前,写代码的时候,首先想到的是需要实现哪些功能。3354调用系统函数,或者自己定义函数,然后一步步执行!

  以后写代码的时候,==首先想到的是什么样的主体要实现什么样的功能,然后统一封装主体的属性和功能,最后实现各个实体的功能。==

  注:面向对象不是一种技术,而是一种思想,解决问题的最基本的思维方式!

  所以面向对象的核心思想是:==不仅仅是简单的封装一个函数(封装成一个函数),还要封装调用函数的主体,让某个主体可以有多个函数。在使用的过程中,你要先获得相应的主体,然后使用主体实现相关功能!==

  5.面向对象比面向过程好?一个面试问题:面向过程和面向对象有什么区别?

  可以实现代码重用和模块化编程,面向对象模块化更深,数据更封闭安全。

  面向对象的思维更贴近现实生活,更容易解决大型复杂的业务逻辑。

  从早期开发的角度来看,面向对象比面向过程复杂,但从维护和扩展的角度来看,面向对象远比面向过程简单!

  面向过程的代码执行效率高于面向对象。

  动词(verb的缩写)面向对象的基本概念。面向对象中两个重要的概念对象,object,真实业务逻辑的一个动作实体对应OOP编程中的一个对象!

  所以:对象使用属性保存数据!对象使用方法管理数据!

  类对象是如何产生的?如何指定对象的属性和方法?

  回答:==在Python中,类是用来产生对象的,类是用来指定对象的属性和方法的!也就是说,在Python中,要想得到一个对象,必须先有一个类!==

  为什么要引入阶级的概念?课堂是对现实世界的模拟。在现实生活中,任何实体都有一个类别,a==class是具有相同或相似属性和动作的实体的集合!==所以,在Python中,一个对象指的是现实中的一个具体实体,而既然现实中的所有实体都有一个类别,那么OOP中的所有对象都应该有一个类!

  一个对象的所有特性都由它所属的类决定,但是每个对象可以有不同的特性。比如我自己的(人类)对象,名字叫老王,男,会写代码,会教书;另一个对象(人类)可能是赵薇,女,会演戏会唱歌!

  2.Python中类的定义,我们可以有两种定义:Python2(经典类)和Python3(新类)。

  经典:不是从任何内置类型派生的类称为经典类。

  类名:# attribute # method新类:

  Class name (): # property # method这是一个类,但是里面什么都没有!其中,==类名不区分大小写,遵循标识符的通用命名规则(由字母、数字和下划线组成,不能以数字开头)。一般为了和方法名区分,类名的首字母一般都是大写的!(大驼峰法)==

  基本语法:

  class Person():# property # method(function)def eat(self):print(我喜欢吃零食)def drink(self): print(我喜欢喝可乐)3 .类实例化(创建对象)类实例化是将抽象的事务具体化为现实世界中的实体。

  类的实例化是==通过类获取对象!==

  它只是该类的一个规范。班级本身基本什么都不会。它必须使用类来获取对象。这个过程叫做==class的实例化!==

  基本语法:

  Object=类名()。在其他编程语言中,类的实例化通常通过实例化new关键字来生成。但是,在Python中,我们不需要new关键字,只需要类名+()括号来表示类的实例。

  案例:将Person类实例化为对象p1

  # 1、定义一个类Person(): #定义相关方法def eat(self): print(我喜欢吃零食)def drive(self):print(我喜欢喝可乐)# 2、实例化对象p1=Person()# 3、在类中调用方法p1.eat () p1.dri。

  # 1.定义一个类Person(): #定义一个方法def speak(self):print(self)print(很高兴见到你!)# 2、类的实例化(生成对象)P1=人()打印(P1) P1。说()P2=人()打印(P2) P2。Speak()总之,类中的self指的是实例化一个对象的人。

  不及物动词添加和获取对象的属性1。什么是属性?在Python中,任何对象都应该由两部分组成:属性方法

  属性是特征,比如一个人的名字、年龄、身高、体重……一个物体的所有属性。

  汽车的品牌、型号、颜色和载重量.是对象的所有属性。

  可以在类外部或类内部添加和获取对象。

  2.在类外添加一个属性,并获取属性设置对象的名称。属性=属性值案例:

  # 1,定义一个Person类class Person(): pass# 2,实例化Person类,生成p1对象p1=Person()# 3,添加属性p1.name=老王 p1.age=18p1.address=北京市顺义区京顺路99号。在Python中,我们可以通过对象来获取对象的属性。

  # 1,定义一个Person类class Person(): pass# 2,实例化Person类,生成p1对象p1=Person()# 3,添加属性p1.name=老王 p1.age=18p1.address=北京市顺义区京顺路99号 # 4,获取p1对象的属性print(f 我的名字:{p1.name}) print(f 我的年龄:{ Print(f 我的地址:{p1.address})3 .获取类内部的外部定义属性# 1,定义一个Person类class Person():def speak(self):print(f 我的名字:{self.name},我的年龄:{self.age},我的地址:{self.address})# 2。实例化Person类,生成p1对象p1=Person()# 3,添加属性p1.name=美猴王 p1.age=500p1.address=花果山水帘洞 # 4,调用speak方法p1.speak()留下一个问题:目前确实可以通过对象和属性的方式来设置或获取对象的属性,但是这种设置属性的方式有点繁琐。每次定义对象时,都必须手动设置属性。在我们面向对象的系统中,实例化对象时可以直接设置对象的属性吗?

  答:是的,但是你需要使用魔法方法。

  七。魔术方法1。什么是魔法方法?在Python中,__xxx__()的函数称为魔法,指的是==特殊函数==

  2.__init__()方法(初始化方法或构造方法)思维:人的姓名、年龄等信息都是先天属性。我们能在生产过程中赋予这些属性吗?

  回答:可以,可以用__init__()方法。它的作用:实例化一个对象时,其中的参数会传递给__init__函数来自动执行。__init__()函数的参数列表将在开头多一项,它将始终引用新创建的实例对象。Python语法要求此参数的名称必须为self。

  # 1.定义一个类类Person(): #初始化实例对象属性def __init__(self,name,Age): #将name属性和Age属性赋予实例化对象本身# self。实例化对象attribute=参数self.name=name self.age=age# 2、实例化对象并传入初始化属性值p1=Person(美猴王),00) # 3。调用p1对象的属性名和age print(P1 . name)print(P1 . age)_ _ init _ _()的方法,创建对象时默认调用,无需手动调用。

  _ _ init _ _(self)中的self参数不需要开发者传递,python解释器会自动传递当前对象

  传递引用。

  3.使用print输出对象时,默认情况下__str__()方法打印对象的内存地址。如果该类定义了__str__方法,将打印从该方法返回的数据。

  没有__str__()方法的类:

  # 1.定义一个类Car(): #首先定义一个__init__方法初始化实例对象属性def __init__(self,brand,model,Color): self。brand=brand self . model=model self . color=color #定义一个__str__内置魔术方法来输出关于汽车的信息。def __str__(self):返回f 汽车品牌:{self.brand},汽车型号:{self.model},汽车颜色:{self.color}# 2。实例化对象c1c1=Car (Mercedes , S600 , black) print(c1) __str__在类外使用print (object)时自动调用这个神奇的方法。

  在类内部定义__str__方法时,必须使用return返回字符串类型的数据。

  4.__del__()方法(delete方法或destruct方法)删除对象时,python解释器默认也会调用__del__()方法。

  类Person():# constructor _ _ init _ _ def _ _ init _ _(self,name,Age):self . name=name self . Age=Age #析构方法_ _ del _ _ def _ _ del _(self):print(f { self }对象已删除)#实例化对象p1=Person(白,100)#删除对象P1DelP1 _ _ del

  答:主要用于关闭文件操作,关闭数据库连接等等。

  5.总结一下神奇的方法:这种方法在什么情况下触发这种方法的实际作用是什么?

  __init__():初始化方法,或称“构造函数”,在对象初始化时执行,主要作用是初始化对象(如赋属性)。

  __str__():对象字符串方法,当我们在类外使用print方法输出对象时触发。它的主要功能是打印出对象,方法必须使用return返回字符串格式的数据。

  __del__():当del删除一个对象时,会触发删除方法或“析构函数方法”。它的主要功能是关闭文件,关闭数据库连接等等。

  八。面向对象综合案例案例一:定义学生的信息类,包括姓名和成绩,定义成绩的打印方式(90分及以上为优秀,80分及以上为良好,70分及以上为中等,60分及以上为合格,60分以下为不合格)

  学生(属性、方法)

  # 1、定义学生信息类class Student(): # 2、定义学生对象属性def _ _ init _ (self,name,score):self . name=name self . score=score # 3、定义一个方法,用于打印学生的成绩def print _ grade(self):if self . score=90:print(f 学生姓名:{self.name},学生成绩:{self.score},优秀)elif self.score=80: print(f 学生姓名:{self.name},学生成绩:{self.score},good )elif self . score=1 中度)elif self . score=60:print(f student name:{ self . name } Student:{self.score},pass )else:print(f Student name:{ self . name },Student的分数:{ self . score },fail) # 4,实例化对象tom=Student(Tom ),80) Tom。 print _ Grade()Jennifer=student( Jennifer ,59)Jennifer。Print _ Grade()案例二:小明体重75.0kg,每跑一次瘦0.50kg,每吃一次胖1kg。解析:对象:小明属性:姓名、权重方法:

  # 1,定义Person类class Person(): # 2,初始化对象属性,名称和权重def __init__(self,name,Weight): self。name=nameself。weight=weight # 3,定义一个__str__方法打印对象def _ _ str _ (self)的信息:return f name: {self.name},Current weight:{ self . weight } KG # 4,定义一个run方法表示运行def run (self): self。weight-=0.5 # 5、定义一个eat方法来表示eating def eat(self):self . weight=1 # 6、实例化对象晓明=Person(晓明,75.0)print(晓明)# 7、eat晓明。吃()打印(小明)# 8、跑步减肥小明.跑步()打印(小明)九。面向对象的三个特点1。面向对象的三个特征是什么:封装

  2.Python中的封装是在Python代码中。封装有两种含义:

  (1)将现实世界主体的属性和方法写入类的操作就是封装。

  class Person():# encapsulation attribute # encapsulation method封装可以作为属性和方法的私有权限添加。

  3.封装中的私有属性和私有方法。在面向对象的代码中,我们可以把属性和方法分为两类:public(属性和方法)和private(属性和方法)。

  公共属性和公共方法:我们可以在类内部和外部操作属性和方法。

  但是,在某些情况下,我们不想在类外操作类内的属性和方法。我们可以将这个属性或方法封装成私有形式。

  4.私有属性的访问限制设置私有属性和私有方法的方式很简单:在属性名和方法名前面加两个下划线_ _就可以了。

  基本语法:

  ClassGirl (): def _ _ init _ _ (self,name): self.name=name self。_ _年龄=18小美=女孩(小美)打印(小美。姓名)打印(小美。_ _ age) #给出一个错误,表示女孩对象没有_ _ age。

  从上面的代码可以看出,私有属性不能在类外直接访问。但是由于各种原因,我们希望从外部访问私有属性。我们如何做到这一点?

  答:我们可以定义一个统计访问接口(函数),专门用来访问私有属性。

  5.私有属性设置和访问接口。在Python中,函数名 get_xx 一般定义为获取私有属性, set_xx 定义为修改私有属性值。

  class Girl(): def __init__(self,Name): self。name=name self。_ _ age=18 # Public方法:外部访问接口def get_age(self): # self access:允许直接访问# outsiders access:加上限制返回self。__age #方法:公共设置接口def set _ age (self,age): self。___ age=age girl=girl(小美)girl . set _ age(19)print(girl . get _ age())6 .私有方法私有方法的定义基本上和私有属性一样,在方法名前面加两个。

  7.封装的意义是什么?用面向对象的编程思想开发项目。

  封装数据属性:明确区分内外,控制隐藏属性的外部操作行为(过滤掉异常数据)。

  类人():def __init__(本人,姓名,年龄):本人。__name=name self。_ _ Age=Age def tell _ info(self):print( Name:% s Age:% s %(self。__name,Self。_ _ age))# provider def set _ info(self,name,age)for private attributes:if not is instance(name,str): print (name必须是字符串类型)return if not isinstance(age,Int): print (age必须是数值类型)return self。_ _ name=nameself。_ _ age=agep=people (jack ,38)p . tell _ info()p . set _ info( Jennifer ,18) p.tell _ info(

  class:def _ _ card(self):print( insert card )Def _ _ auth(self):print(用户验证)def __input(self): print(输入取款金额)Def _ _ print _ bill(self):print( print bill )Def _ _ take _ money(self):print(取款)#定义一个对外提供服务的公共方法Def取款(self): self。_ _卡()自身。_ _ auth () self。_ _ input () self。_ _ print _ bill () Self。_ _ take _ money () ATM=ATM () ATM。撤回()对于来自

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: