课件0705类的成员方法_第1页
课件0705类的成员方法_第2页
课件0705类的成员方法_第3页
课件0705类的成员方法_第4页
课件0705类的成员方法_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

类方法的定义和调用制作:课程编写团队出版社:机械工业出版社《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允许声明属于类本身的方法,即类方法。类方法不对特定的实例进行操作,在类方法中访问对象实例属性会导致错误。它的第一个参数必须为类对象的本身,通常为cls。

#类方法的语法格式如下:@classmethoddef类方法名(cls,[形参列表]):函数体或者pass

类方法和静态方法静态方法没有类似self、cls这样的特殊参数。它们的特点和区别如下:1)使用@staticmethod或@classmethod就可以不需要实例化,直接用“类名.方法名()”来调用。2)@staticmethod不需要表示自身对象的self和自身类的cls参数,就跟使用函数一样。3)@classmethod也不需要self参数,但第一个参数需要是表示自身类的cls参数。#静态方法的语法格式如下:@staticmethoddef类方法名([形参列表]):

函数体或者pass

类方法和静态方法的简单对比类方法:定义:使用@classmethod装饰器定义,第一个参数是cls,表示类本身。用途:用于操作类属性或创建类的实例。调用方式:可以通过类或实例调用。静态方法:定义:使用@staticmethod装饰器定义,不需要self或cls参数。用途:用于实现与类相关的工具函数,不依赖于类或实例。调用方式:可以通过类或实例调用。

综合范例——类方法classCounter:count=0#类属性

@classmethoddefincrement(cls):cls.count+=1returncls.count#调用print(Counter.increment())#输出:1(通过类)c=Counter()print(c.increment())#输出:2(通过实例)

综合范例——静态方法classMathUtils:@staticmethoddefadd(a,b):returna+b#调用print(MathUtils.add(3,5))#输出:8(通过类)m=MathUtils()print(m.add(2,4))#输出:6(通过实例)

综合范例——类方法和静态方法classDog:species="Canislupusfamiliaris"#类属性

@classmethoddefget_species(cls):#类方法

"""返回狗的物种"""returncls.species

@staticmethoddefis_adult(age):#静态方法

"""判断狗是否成年(假设2岁及以上为成年)"""returnage>=2#调用类方法print(Dog.get_species())#输出:Canislupusfamiliaris

#调用静态方法print(Dog.is_adult(3))#输出:Trueprint(Dog.is_adult(1))#输出:False方法对比总结表方法类型装饰器首参数访问权限典型用途实例方法无self实例属性/方法对象行为实现类方法@classmethodcls类属性/其他

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论