版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
多态《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录方法重写多态方法重写01什么叫方法重写?方法重写(Override)是指在子类中重新定义父类中已有的方法,以改变或扩展该方法的行为。子类继承父类,会继承父类的所有方法,当父类方法无法满足需求,可在子类中定义一个同名方法覆盖父类的方法,这就叫方法重写。当子类的实例调用该方法时,优先调用子类自身定义的方法,因为它被重写了。
方法重写
范例7-10:方法重写classPeople:defspeak(self):print("peopleisspeaking!")classStudent(People):#继承defspeak(self):#方法重写。重写父类的speak方法print("studentisspeaking!")classTeacher(People):passs=Student()#Student类的实例ss.speak()t=Teacher()#Teacher类的实例tt.speak()#运行结果studentisspeaking!peopleisspeaking!
范例7-10:方法重写从运行结果可以看到,因为子类Student重写了父类People的speak()方法,当Student类的对象s调用speak()方法,优先调用Student的speak方法,而Teacher()类没有重写People的speak()方法,所以会t.speak()调用父类的speak()方法,打印peopleisspeaking。
范例7-10-2:方法重写classParent:defshow(self):print("父类的方法")classChild(Parent):defshow(self):#重写父类的show方法
print("子类重写后的方法")p=Parent()p.show()#输出:父类的方法c=Child()c.show()#输出:子类重写后的方法这是一个更简单的例子多态02多态在Python中,多态(Polymorphism)是面向对象编程中一个重要的概念,它允许不同类的对象对相同的方法做出不同的响应。简单来说,多态允许使用统一的接口来操作不同的对象,而不必考虑它们的具体类型。多态通常通过继承和方法重写(Override)来实现。当子类继承父类并实现了相同的方法时,可以使用父类的引用来指向子类的对象,并调用这个方法,这样做会根据实际的对象类型执行相应的操作。
范例7-11:多态实例classAnimal:#定义类defsound(self):#定义sound方法passclassDog(Animal):#继承了上面的类Animaldefsound(self):#定义sound方法return"Woof!"classCat(Animal):#继承了上面的类Animaldefsound(self):#定义sound方法return"Meow!"#多态函数-可以处理任何Animal子类的对象defmake_sound(animal):print(animal.sound())#创建不同的动物对象dog=Dog()cat=Cat()#调用make_sound函数,传入不同的动物对象make_sound(dog)#输出:Woof!make_sound(cat)#输出:Meow!
范例7-11:多态实例在这个例子中,Animal是一个基类,它定义了一个sound()方法。Dog和Cat类分别继承自Animal类,并重写了sound()方法以返回狗和猫的叫声。make_sound()函数接受一个动物对象作为参数,并调用其sound()方法。尽管传入的是不同的对象(一只狗和一只猫),但通过多态,它们各自调用了自己类中的sound()方法,产生了不同的叫声。这就是多态的基本概念:不同的对象通过统一的接口展现出各自的行为特征。这种特性使得代码更具灵活性和可扩展性,同时也使得代码更易于维护和理解。
多态多态的特点同一接口:不同对象调用相同的方法名(如speak()或area())不同实现:每个类有自己的方法实现运行时确定:Python在运行时确定调用哪个类的方法多态使得代码更加灵活和可扩展,添加新类时不需要修改现有的多态函数。感谢聆听出版社:机械工业出版社《Python编程基础与应用》配套课件继承制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录继承概念单继承多继承继承概念01Python继承是面向对象中三大特征之一,继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的属性和行为。Python继承是把已存在的类的定义作为基础建立新的类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使复用以前的代码变得非常容易,能大大缩短开发的周期。例如之前定义的Car类(汽车类)包含了名字、重量、颜色等。由这个汽车类可以派生出小轿车和货车这两个类,我们为小轿车添加后备箱,为货车添加货箱。
继承概念生活中,我们也有很多继承的例子。如牛、羊属于食草动物类,狮子、狼属于肉食动物类,而它们都属于动物类。可以理解,动物类是父类,食草动物类和肉食动物类是子类,它们都是从动物类继承过来的。虽然食草类和肉食类都是动物类,但两者的属性和行为是有差别的,父类更通用,子类更具体,所以子类具有父类的一般性,但也有自身的特殊性。继承可以分为单继承和多继承两种。
继承概念单继承02单继承在Python中,如果父类只有一个时,这种继承叫单继承。子类定义的语法格式如下:子类能继承父类的所有公共属性和公共方法,但不能继承其私有属性和私有方法。class子类名(父类名):
类体
范例7-8:货车类与单继承的使用classCar:#父类Cardef__init__(self,sname,sweight,scolour):#构造方法=snameself.weight=sweightself.colour=scolourdefrun(self):print(str(self.weight)+"顿重的"+str(self.colour)+str()+"的汽车在行驶中。")classTruck(Car):#子类Truck(货车类)
继承了父类Car的公共方法和公共属性defloadweight(self,sloadweight):#定义方法,定义载重量self.loadweight=sloadweightdefloadweightinfo(self):#定义方法输出语句print('我是货车,可以载重%s顿'%(self.loadweight))volvo=Truck("沃尔沃",4,"黄色")#创建货车对象volvo.loadweight(20)#调用子类方法volvo.run()#调用父类方法volvo.loadweightinfo()#调用子类方法
范例7-6:货车类与单继承的使用范例中定义了一个父类Car,该类中的构造方法,需要传递3个参数。然后定义了一个子类Truck类,用于定义货车类。子类继承了父类的公共属性和公共方法。子类定义了loadweight方法用于定义载重量和loadweightinfo方法用于输出信息内容。从运行结果可以看出,可以通过子类创建对象volvo,并调用父类的公共方法。可以说完全继承了父类的公共属性和公共方法。多继承03
多继承多继承指的是一个子类从多个父类继承而来,继承了多个父类的特性。多继承可以看成是对单继承的扩展。其语法格式如下:class子类名(父类1名,父类2名…):
类体
范例7-7:电话手表与多继承的使用classPhone:#定义了父类1(电话类)
telenum=''deftel(self,stelenum):#定义方法,用于输出拨打信息
self.telenum=stelenumprint('您正在拨打%s'%(self.telenum))classWatch:#定义了父类2(手表类)
nowtime=''week=''deftimeinfo(self,snowtime,sweek):#定义方法,用于输出时间信息
self.nowtime=snowtimeself.week=sweekprint('现在的时间是:%s,今天是%s'%(self.nowtime,self.week))classTelwatch(Phone,Watch):#定义子类(电话手表类),继承于两个父类(电话类和手表类)
defTwinfo(self):print('我是电话手表')iwatch=Telwatch()#创建电话手表对象iwatch.Twinfo()#调用子类方法iwatch.tel('88888888')#调用父类1中的方法iwatch.timeinfo('12:00','星期一')#调用父类2中的方法
范例7-7:电话手表与多继承的使用从运行结果可以看出,子类同时继承了两个父类,并成功调用父类的方法。在Python中,假如多个父类中有相同名字的方法,如果子类调用该方法时,会选择调用先继承的父类中的方法。感谢聆听出版社:机械工业出版社《Python编程基础与应用》配套课件类的定义和调用.制作:课程编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录面向对象的概念类的定义和调用类的属性面向对象的概念01面向对象(ObjectOriented)是软件开发方法,是一种程序设计规范,是一种对现实世界理解和抽象的方法。面向对象编程(Object-OrientedProgramming,OOP)是一种编程范式,Python完全支持OOP。在面向对象编程思想中,一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。Python采用了面向对象编程程序设计思想,它可以很方便地创建类和对象。
面向对象:对象和类2)类类是一个抽象的概念,它是对一群具有相同特征和行为的事物的统称。如,人类,汽车类等。人类,具有相同的属性和行为,如姓名、性别、身高、体重等属性,吃饭、睡觉、走路等行为。
面向对象:对象和类1)对象对象英文为“object”,表示任意存在的事物。现实世界中,随处可见的一个事物即是对象,如一个人,一辆车等。如要形容一个人对象,我们通常用两种方式,第一静态的,如体貌特征、年龄等,即对象的属性;第二动态的,如动作、行为等,即对象的行为。
面向对象:对象和类简单地总结,类(Class)与对象(Object)类:抽象模板,描述对象的属性和行为。对象:类的具体实例,拥有类定义的属性和方法。
面向对象的四大核心特性(1)封装(Encapsulation)作用:隐藏内部细节,暴露安全接口。实现:使用私有属性/方法(命名前加__)。通过公有方法访问私有成员。先做了解,后续会有具体介绍
面向对象的四大核心特性(2)继承(Inheritance)作用:子类继承父类的属性和方法,实现代码复用。类型:单继承(Python默认)多继承(通过逗号分隔多个父类)。先做了解,后续会有具体介绍
面向对象的四大核心特性(3)多态(Polymorphism)作用:同一方法在不同类中有不同实现。实现:通过方法重写或鸭子类型(DuckTyping)。先做了解,后续会有具体介绍
面向对象的四大核心特性(4)抽象(Abstraction)作用:定义接口规范,隐藏实现细节。实现:通过抽象基类(ABC)或约定(如未实现方法抛出NotImplementedError)。先做了解,后续会有具体介绍类的定义和调用02
类的创建在Python中,要想创建一个对象,需先定义一个类。在Python中,类是通过class关键字定义的,用于创建对象(实例)。类的定义语法格式如下:class类名():类的实现部分,或者写pass其中类的实现部分主要有类变量、方法和属性等定义语句组成。如果在定义类时,没想好类的具体功能,可以用pass语句代替,叫作占位语句,无实际意义。
类的创建——基本语法classClassName:"""类的文档字符串"""class_attribute=value#类属性
def__init__(self,parameters):#构造方法self.instance_attribute=parameters#实例属性
defmethod(self,parameters):#实例方法#方法体pass
@classmethoddefclass_method(cls,parameters):#类方法pass
@staticmethoddefstatic_method(parameters):#静态方法pass
类的创建——简介示例classDog:
"""一个表示狗的简单类"""
species="Canisfamiliaris"#类属性,所有实例共享
def__init__(self,name,age):
"""初始化方法"""=name#实例属性self.age=age
defbark(self):
"""实例方法"""returnf"{}sayswoof!"
def__str__(self):
"""特殊方法,定义对象的字符串表示"""returnf"{}is{self.age}yearsold"类的调用(实例化)为什么要对类实例化?类实例化(创建类的实例)是面向对象编程中的核心概念,主要原因包括:创建具体对象:类只是蓝图/模板,实例化才能创建具体可用的对象封装数据:每个实例可以维护自己独立的状态(属性值)实现多态:不同实例可以表现出不同的行为重用代码:通过实例化可以多次重用类定义的逻辑管理状态:实例可以保存和修改自己的属性状态类实例化的基本语法instance_name:变量名,用于引用该实例ClassName:要实例化的类名arguments:传递给__init__方法的参数(如果有)instance_name=ClassName(arguments)实例化示例——基本实例化#类的定义classPerson:def__init__(self,name,age):=nameself.age=age
defintroduce(self):print(f"大家好,我是{},今年{self.age}岁")#实例化p1=Person("张三",25)#创建第一个实例p2=Person("李四",30)#创建第二个实例roduce()#输出:大家好,我是张三,今年25岁roduce()#输出:大家好,我是李四,今年30岁实例化示例——带默认参数的实例化#类的定义classCar:
def__init__(self,brand,model="未知型号"):self.brand=brandself.model=model
definfo(self):print(f"这辆车是{self.brand}{self.model}")#实例化car1=Car("丰田")#使用默认model值car2=Car("宝马","X5")#提供model值()#输出:这辆车是丰田
未知型号()#输出:这辆车是宝马X5实例化示例——多个实例独立工作classBankAccount:#类的定义def__init__(self,owner,balance=0):self.owner=ownerself.balance=balance
defdeposit(self,amount):self.balance+=amountprint(f"存入{amount},当前余额:{self.balance}")
defwithdraw(self,amount):ifamount>self.balance:print("余额不足")else:self.balance-=amountprint(f"取出{amount},当前余额:{self.balance}")#实例化#创建两个独立账户account1=BankAccount("小明",1000)account2=BankAccount("小红",500)
#输出:存入200,当前余额:1200account1.deposit(200)
#输出:取出100,当前余额:400account2.withdraw(100)实例化示例——定义学生类并实例化#以下是类的定义classstudent():grade="高一"defspeak(self,sname,ssex,sage):=snameself.sex=ssexself.age=sageprint("大家好!我是"+str()+",性别是"+str(self.sex)+",今年"+str(self.age)+"岁")defstudy(self):print("我正在认真学习!")#以下是类的调用,即实例化stu1=student()#实例化学生类student#对实例man1调用实例方法speak,并传递3个参数stu1.speak("小明",'男',16)print("今年在读"+str(student.grade))stu1.study()#以下是运行结果大家好!我是小明,性别是男,今年16岁今年在读高一我正在认真学习!可以看到,在上述例子中,定义了name、age和sex这3个对象属性。实例化对象的时候,只需要根据实例化的语法格式进行即可。类的属性03类的属性——为什么要定义类的属性?类的数据成员是在类中定义的成员变量,用来存储描述类的特征的值,称为属性。属性实际上是在类中的变量,建议在类定义的开始位置初始化类的属性,或者使用构造方法(__init__)初始化实例的属性。类属性的定义和使用在类中定义属性主要有以下原因:封装数据:将数据与操作数据的方法绑定在一起维护状态:让对象可以保存自己的状态信息代码组织:将相关数据和功能组织在一起,提高代码可读性和可维护性数据共享:类属性可以在所有实例间共享数据访问控制:可以通过属性控制数据的访问权限类的属性分类Python中的类属性可以分为以下几类属性类型定义方式访问范围修改影响用途类属性类内部直接定义类名或实例均可访问影响所有实例存储共享数据实例属性__init__
中通过
self
定义仅实例访问仅影响当前实例存储对象特有数据公共属性无命名限制(如
self.value)外部直接访问直接生效常规数据操作私有属性以
__
开头(如
__secret)需通过公有方法访问通过方法控制修改隐藏内部实现,增强安全性类的属性——1.类属性定义:直接在类中定义(不在任何方法内),所有实例共享。特点:通过类名或实例均可访问。修改类属性会影响所有实例。用途:存储类级别的常量或共享数据。类的属性——2.实例属性定义:在__init__或其他实例方法中通过self定义,属于具体实例。特点:每个实例拥有独立的副本。只能通过实例访问。用途:存储对象特有的数据。类的属性——3.公共属性定义:无命名限制的属性,可直接通过实例访问。特点:命名无前缀(如self.value)。可随意读取和修改。用途:常规属性,允许外部直接操作。类的属性——4.私有属性定义:以双下划线__开头的属性(如__secret)。特点:外部无法直接访问(实际被重命名为_ClassName__secret)。需要通过公有方法间接访问。用途:隐藏内部实现细节,增强封装性。类的属性——应用时的区别和注意类属性:用于常量或跨实例共享的数据。实例属性:存储对象状态,通过self
初始化。公共属性:允许外部直接操作,但需谨慎设计。私有属性:通过__前缀保护关键数据,提供公有方法访问。感谢聆听出版社:机械工业出版社《Python编程基础与应用》配套课件封装制作:教材编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录封装封装的作用01什么是封装及其作用?封装是面向对象三大特性(封装、继承、多态)之首,核心分为三层含义:1.数据与行为打包:将描述事物的属性(数据)和操作数据的方法(行为)统一放进一个类中,把复杂逻辑包装成整体,外部只需调用,不用关心内部实现。2.访问权限控制:隐藏类内部敏感数据/私有逻辑,只对外暴露安全的访问接口,避免外部随意篡改内部数据,保证数据安全。3.提高代码的可维护性和可扩展性:类的内部实现被隔离,后续修改内部逻辑或优化代码,只需保持公开接口,外部调用该类的代码无须修改。
封装封装的实现方法02封装的实现方法11.Python依靠下划线命名规则区分访问权限,实现数据隐藏:
命名格式类型访问规则name公共属性/方法无下划线,类内、类外、子类都能直接访问_name保护属性/方法单下划线,仅约定内部使用,语法上外部仍可访问__name私有属性/方法双下划线,Python自动改名,外部无法直接访问,仅类内可用
范例7-8:使用命名约定实现封装属性classStudent:def__init__(self,name,score):#单下划线开头:约定为受保护属性(protected)#仅编程约定,语法外部仍可访问,子类能访问
self._name=name#双下划线开头:私有属性,自动名称改写namemangling#外部无法直接obj.__score访问
self.__score=score其余代码省略输出结果:张三85原始分数:85修改后分数:95分数无效:必须在0-100之间需要注意的是:Python的封装是“约定式”的,而非强制式。封装的实现方法22.使用属性装饰器:@property装饰器把方法伪装成属性,读写时像访问普通属性一样简洁,同时保留数据校验、逻辑控制的封装能力,是Python推荐的优雅封装写法。三套配套装饰器1.@property:读取装饰器(getter),获取私有属性值2.@属性名.setter:修改装饰器(setter),赋值修改私有属性,可加校验3.@属性名.deleter:删除装饰器(deleter),执行del删除属性时触发。
范例7-9:使用属性装饰器实现封装
范例7-9classBankAccount:def__init__(self,balance):#私有属性:双下划线,外部无法直接访问
#所有余额操作统一通过property控制,实现封装
self.__balance=balance@propertydefbalance(self):"""获取器getter:读取私有余额,可添加日志、权限校验"""print("执行余额查询操作")returnself.__balance代码省略输出结果:执行余额查询操作当前余额:1000执行余额修改操作执行余额查询操作修改后余额:1500执行余额修改操作错误:余额不能为负,设置失败执行余额查询操作拦截后余额:1500封装的实现方法2通过属性装饰器实现的封装具有多重设计优势。在数据完整性方面,它确保了余额始终符合“不能为负”的基本业务规则,从源头杜绝了非法数据。在使用体验上,外部调用者可以像操作普通属性一样简洁地访问和修改余额,无须记忆烦琐的方法名,大大提升了代码的可读性和易用性。这种设计将所有的验证逻辑集中在setter方法这一处,使得维护和调试变得十分便捷。同时其扩展性极强,只需在现有setter方法中添加判断条件,即可轻松实现单笔交易限额、日累计限额等更复杂的业务规则。这个BankAccount类体现了封装的四个优势:1)维护性:内部修改不影响外部调用。2)安全性:数据验证和业务规则集中管理。3)易用性:简化外部调用接口。4)可扩展性:便于添加新功能而不破坏现有代码。
感谢聆听出版社:机械工业出版社《Python编程基础与应用》配套课件类方法的定义和调用制作:课程编写团队出版社:机械工业出版社《Python编程基础与应用》配套课件本课件为《Python编程基础与应用(第2版)》配套教学资源,由编写团队精心打造。为便于教学使用,团队同步提供了丰富的辅助材料,涵盖微课视频、教学课件、实训手册、习题答案、课程标准及程序源代码等。同时,教材配套超星教学示范包,支持一键克隆为网络在线课程,助力高效开展线上线下混合式教学。欢迎联系出版方订购使用。
书名:《Python编程基础与应用(第2版)》出版社:机械工业出版社主编:蓝永健、陈冬冬副主编:蔡德琛、朱海鑫、邓爱玲+contents目录Python类的成员方法简介特殊方法公有方法、私有方法类方法和静态方法Python类的成员方法简介01Python类的成员方法可以分为公有方法、私有方法、静态方法、类方法、抽象方法和一些特殊方法等。1)所谓的特殊方法是指方法的两侧各有两个下画线(__),它经常与某个运算符或者内置函数相对应用,比如__init__()和__del__()就是这一类方法。2)私有方法的名字以两个或者更多个下画线开始。3)公有方法可以通过对象名直接调用。私有方法不能通过对象名直接调用,可以在其它实例方法中通过前缀self进行调用,或在外部通过特殊的形式来调用。4)抽象方法一般定义在抽象类中并且要求派生类必须重新实现。本教材不对抽象类作研究。5)“实例方法”可以分为公有方法、私有方法、抽象方法和一些特殊方法。6)静态方法和类方法不是“实例方法”,不属于任何实例,不会绑定到任何实例,也不依赖于任何实例状态,因此与实例方法相比能减少很多开销。7)静态方法使用@staticmethod为装饰器,可以没有参数。动态方法使用@classmethod为装饰器,它必须有参数,并且一般以cls作为第一个参数表示该类本身。
Python类的成员方法简介
Python类的成员方法简介特点:必须包含self参数(指向实例)可访问和修改实例属性通过实例调用Python类的方法——实例方法特殊方法02Python类的方法——特殊方法特点:以双下划线__开头和结尾由Python自动调用实现运算符重载/对象行为Python类的方法——__init__()方法__init__()方法是一个特殊的类实例方法,称为构造方法(或构造函数)。构造方法用于创建对象时使用,每当创建一个类的实例对象时,Python解释器都会自动调用它。Python类中,手动添加构造方法的语法格式如下:此方法的方法名中,开头和结尾各有2个下划线,且中间不能有空格。def__init__(self,...):代码块Python类的方法——__init__()方法定义:__init__()是类的构造函数(初始化方法),在创建类的实例时自动调用。用于初始化实例的属性。参数:第一个参数是self,表示实例本身。可以接受其他参数,用于初始化实例的属性。调用方式:无需显式调用,创建实例时自动调用。用途:用于设置实例的初始状态。
范例:定义构造方法并自动初始化汽车属性下面我们来自定义构造方法,初始化汽车属性,传入不同的weight和colour属性值,创建多少个Car对象:classCar:def__init__(self,sname,sweight,scolour):#构造方法=snameself.weight=sweightself.colour=scolourdefrun(self):print(str(self.weight)+"顿重的"+str(self.colour)+str()+"的汽车在行驶中。")car1=Car("宝马",4,"蓝色")#创建对象,传入形参car1.run()#调用方法car2=Car("皇冠",3,"黑色")#创建对象,传入形参car2.run()
范例:定义构造方法另一个例子:classDog:def__init__(self,name,age):=nameself.age=age
#创建实例时自动调用__init__()dog=Dog("Buddy",3)print()#输出:Buddyprint(dog.age)#输出:3Python类的方法——__del__()方法__del__()称为析构方法,当对象被销毁时执行的操作,一般用于资源回收。Python有垃圾回收机制,程序结束时会自动调用__del__(),也可手动调用del语句删除对象。语法格式如下:def__del__(self,...):
代码块
范例:自动调用析构方法的演示通过范例来说明一下自动调用析构方法的演示:从范例7-3的运行结果可以发现,手动调用析构方法是执行del语句直接删除对象。classFruit:def__del__(self):print("析构方法被调用")apple=Fruit()delappleprint("程序结束")公有方法、私有方法03
公有方法、私有方法私有方法(private)的定义如同私有属性定义一样,在方法名字前面加两个下划线“__”标识符。公有方法(public)就是方法前面没有加两个下划线“__”标识符的方法,与私有方法相对而言。在类的内部,使用def关键字可以为类定义一个私有方法或者公有方法方法,与一般函数定义不同,它们必须包含参数self,且为第一个参数。定义为私有方法,只有在类的内部使用,在类的外部无法被访问。私有类型的设定,使得类更加稳定,更加安全。我们可以将一些不允许访问或更改的属性和方法设为私有类型,从而避免了由于使用该类时的失误而导致类被更改。
范例:私有方法和公共方法(1)通过范例来说明一下私有方法和公共方法的使用:#类的定义classWomen:#以下是构造方法def__init__(self,sname,sage):=sname#公共属性nameself.__age=sage#私有属性__age
#以下是私有方法def__info(self):#私有方法info,用于输出私有属性__age的值print("%s的年龄是%d"%(,self.__age))
#以下是公共方法deftalk(self,message):print("%s说了一句话:%s"%(,message))#实例化xiaofang=Women("小芳",18)#实例化xiaofang._Women__info()#强行访问私有方法xiaofang.talk("今天天气真好")#访问公共方法
范例:私有方法和公共方法(2)通过范例来说明一下私有方法和公共方法的使用:classDog:
def__init__(self,name,age):=nameself.age=age
defbark(self):#公共方法
"""让狗叫"""returnself.__make_sound()#调用私有方法
def__make_sound(self):#私有方法"""生成狗叫的声音"""return"Woof!"#创建实例并调用公共方法dog=Dog("Buddy",3)print(dog.bark())#输出:Woof!
#尝试直接调用私有方法(会报错)#print(dog.__make_sound())#AttributeError:'Dog'objecthasnoattribute'__make_sound'类方法和静态方法04
类方法和静态方法类的方法有2种:静态方法和类方法,其中@staticmethod表示静态方法,@classmethod表示类方法。Python允许声明属于类本身的方法,即类方法。类方法不对特定的实例进
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026java jquery面试题及答案
- 2026mybatis面试题总结及答案
- 小学道德与法治六年级下册《共建共享我们的社区生活》教学设计
- 高职安全技术与管理专业二年级《燃气系统隐患精准排查与风险评估》实训教案
- 初中物理中考一轮复习:力学与电学综合应用教案
- 小学三年级语文《大自然的声音》核心知识清单
- 小学书法三年级硬笔书法横折折折钩知识清单
- 六年级上册《分数除法:算理深化与模型应用》练习课教学设计
- 小学三年级语文下册《燕子》核心素养导向教学设计
- 2026年低压电工作业操作证模拟考试题库(附答案)
- 小升初综合试题及答案
- 2026年湖北省中考英语真题含解析
- GB/T 47720-2026起重机械远程控制系统通用技术规范
- 2026继续教育一级消防工程师试题题(答案附后)
- 盾构渣土处理及再利用技术规程
- 2026年全国一卷高考英语读后续写深度解读及范文
- 学法减分考试常考题目题库(80题)
- 贵州省贵阳市 2024-2025学年七年级下学期期末考试英语试卷(含答案)
- 2025年军校模拟面试试题及答案
- 2026四川达州市面向高校毕业生招聘园区产业发展服务专员37人笔试参考题库及答案解析
- 2025年国家铁路局直属事业单位考试真题(附答案)
评论
0/150
提交评论