版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
介绍类方法、静态方法、魔方方法方
法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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海纽约大学《基础写作教程》2025-2026学年期末试卷
- 沈阳药科大学《幼儿美术教育与活动指导》2025-2026学年期末试卷
- 防爆电气作业理论知识机考试题及答案
- Calcium-L-Threonate-Standard-生命科学试剂-MCE
- 淡水水生植物繁育工岗前激励考核试卷含答案
- 传输机务员岗前核心管理考核试卷含答案
- 电线电缆挤塑工安全文化模拟考核试卷含答案
- 真空垂熔工持续改进知识考核试卷含答案
- 井下采煤工复试能力考核试卷含答案
- 绝缘子制造工安全宣传水平考核试卷含答案
- 2024年潍坊中考英语试题及答案
- 建设银行个人经营性贷款合同(格式范本)
- 返工返修作业培训
- 2025年安徽水利水电职业技术学院单招职业技能考试题库往年题考
- 幼儿园中班美术《青花瓷瓶》课件
- 水稻收购订单合同范例
- 五十二个中医护理方案
- 04S519小型排水构筑物(含隔油池)图集
- 连铸工职业技能大赛考试题库500题(含各题型)
- 预应力钢筒混凝土管(pccp)专项施工方案
- 《离子型稀土矿山开采污染物排放-标准编制说明》
评论
0/150
提交评论