Python程序设计基础教程(微课版第2版)7.5 方法_第1页
Python程序设计基础教程(微课版第2版)7.5 方法_第2页
Python程序设计基础教程(微课版第2版)7.5 方法_第3页
Python程序设计基础教程(微课版第2版)7.5 方法_第4页
Python程序设计基础教程(微课版第2版)7.5 方法_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

介绍类方法、静态方法、魔方方法方

法CHAPTER701类方法02静态方法CONTENTS目

录03魔法方法方法是定义在类里的函数第一个参数指向该类的实例实例调用装饰器语法糖实例方法方

法方

法调用时被隐式传入用户定义的大部分方法或特定命名规范方法方

法静态方法魔法方法类方法方

法类方法vs02

在方法定义前加内置“@classmethod”类方法01类方法的第一个参数自动传入,命名为cls调用实例方法有

例无

例方

法>>>classTestClassMethod:value=4#value是类属性def__init__(self):='something'#name是实例属性@classmethod#定义类方法deffun(cls):

#类方法中只能调用类属性或其它类方法print("callingaclassmethod...")print("TestClassMethod.value=",cls.value)#print()

#如果不注释该句,执行下面的测试语句将提示AttributeError错误。原因是,不管是通过类还是实例调用,传入的都是类对象,因此不能访问实例属性>>>TestClassMethod.fun()callingaclassmethod...TestClassMethod.value=4>>>a=TestClassMethod()>>>a.fun()callingaclassmethod...TestClassMethod.value=4【例】类方法可通过类或类的实例调用方

法类方法辅助构造器创建实例“_init_”方

法Member类age年龄属性传入年龄初始化传入出生年初始化方

法01#-*-coding:utf-8-*-02#testclassmethod.py03fromdatetimeimportdate04classMember:05def__init__(self,name,age):06=name07self.age=age08@classmethod09deffrom_birthyear(cls,name,birthyear):10age=date.today().year-birthyear11returncls(name,age)#通过类对象实例化一个该类的对象12defhello(self):13print('Iam%s.Iam%dyearsold'%(,self.age))

【例】

定义一个接受出生年作为参数的类方法,可自选定义参数方

法>>>mike=Member('Mike',23)>>>john=Member.from_birthyear('John',1980)>>>mike.hello()IamMike.Iam23yearsold>>>john.hello()IamJohn.Iam41yearsold按“F5”键方

法静态方法需用类或类实例调用,不会隐式传入调用者信息函数在业务逻辑只与这个类相关当定义在类的内部时它的功能与调用者无关将普通函数定义移到了类的内部方

法调

者第一参数隐式传入静态方法方

法>>>classA:

@staticmethod

defhello(s):#第一个参数就是普通显式参数,不是调用者

print('Hello',s)>>>a=A()>>>A.hello('Mike')#静态方法一般用类调用HelloMike>>>a.hello('Mike')#静态方法也可以用类实例调用HelloMike“@staticmethod”方

法魔法方法魔法方法双下划线开头双下划线结尾不是直接调用而是自动地间接调用方

法对象的构造运算符重写访问控制“_init_”

是一个常用的魔法方法方

法魔法方法在基类

object

中定义返回类实例的字符串方

法>>>classPoint1:#没有重写__str__方法

def__init__(self,x,y):

self.x=x

self.y=y>>>classPoint2:

def__init__(self,x,y):

self.x=x

self.y=y

def__str__(self):#重写__str__方法

return'Point('+str(self.x)+','+str(self.y)+')'>>>a,b=Point1(3,4),Point2(3,4)>>>str(a)'<__main__.Point1objectat0x0000021B9996A550>'>>>str(b)'Point(3,4)'

【例】内置函数str()通过调用该方法实现任意对象向字符串的转换方

法__eq__方法010203

判断实例是否相等“==”调用此方法实例对象整数身份号方

法【例】如果要实现内容值的比较,必须重写该方法>>>classPoint1:#没有重写“__eq__”方法def__init__(self,x,y):self.x=xself.y=y>>>classPoint2:def__init__(self,x,y):self.x=xself.y=ydef__eq__(self,other):#重写“__eq__”方法,用内容值进行比较returnself.x==other.xandself.y==other.y>>>a1,b1=Point1(3,4),Point1(3,4)方

法【例】如果要实现内容值的比较,必须重写该方法>>>a1==b1#默认比较id(a1)与id(b1)False>>>a2,b2=Point2(3,4),Point2(3,4)#调用重写的“__eq__”方法>>>a2==b2True>>>a3,b3=Point2(3,4),Point2(4,5)>>>a3==b3False方

法_eq_

方法魔法方法比较运算符“==”的重写方

法魔法方法签名运算符使用样式__lt__(self,other)x<y__le__(self,other)x<=y__gt__(self,other)x>y__ge__(self,other)x>=y__eq__(self,other)x==y__ne__(self,other)

温馨提示

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

评论

0/150

提交评论