初学者python笔记(静态属性、类方法、静态方法、类的组合)

Shanon ·
更新时间:2024-11-13
· 907 次阅读

文章目录类的三大方法1、静态属性2、类方法、静态方法3、三大方法总结类的组合1、用法分析2、面试案例分析
本篇文章是上一篇:初学者python笔记(面向对象编程、类与对象)的后续篇,是关于Python中面向对象编程的更深入分析,主要总结了类的三大方法:静态属性、类方法、类的组合方面的重点知识 类的三大方法

Ps:请先看案例,后文有对三大方法的分类总结

1、静态属性 class Room: def __init__(self,name,owner,width,length,heigh): self.name= name self.owner= owner self.width= width self.length= length self.heigh= heigh #计算体积的一个方法 @property #绑定实例的方法(把整个类当做一个装饰器),property操作相当于把函数属性变成了数据属性 def cal_area(self): print('%s的房间的体积为:' %self.owner, self.width * self.length * self.heigh) #实例化 v = Room('卧室','Ross',50,50,30) #传入self的参数 v2 = Room('浴室','山治',2,2,3) #调用对象,因为被变成了数据属性(静态属性),就不需要加括号运行了 #v.cal_area() #v2.cal_area() v.cal_area v2.cal_area

运行结果:
静态属性

2、类方法、静态方法 class Room: tag = 'in Room' def __init__(self,name,owner,width,length,heigh): self.name= name self.owner= owner self.width= width self.length= length self.heigh= heigh def pr_info(self): print(self.tag) @classmethod #一个专门供类使用的方法(类方法),可以不通过实例,只执行类的方法 def pr_infomation(cls,x): #必要参数cls,但不需要再传入self了,因为类中包含了self print(cls) #打印pr_infomation方法所在的类 print(cls.tag) #这样就可以单独调用类的方法 print(x) #外部传入的形参x @staticmethod #声明定义一个静态方法,不绑定cls也不绑定self def eat_food(a,b,c): print('{} {} {}正在吃饭'.format(a,b,c)) #因为没有绑定类,也没有绑定实例,故不能运行cls和self的属性 #print('%s,%s来自静态方法' %(self.name,self.owner)) #实例化 '''v = Room('卧室','Ross',50,50,30) #传入参数 v2 = Room('浴室','山治',2,2,3) #调用对象,说明self是可以调用类中定义的数据属性的 v.pr_infomation() v2.pr_infomation()''' #类方法,可以传入参数,可以使用类属性 Room.pr_infomation('1') #执行类中的方法,但不实例化,只能访问类的属性 Room.pr_infomation('带参类方法') #传入参数的类方法 #静态方法,只能使用传入的参数 Room.eat_food('路飞','索隆','山治') #用类来调用静态方法 vv = Room('浴室','山治',2,2,3) vv.eat_food('路飞','索隆','山治') #用实例来调用静态方法方法,同样可行

运行结果:
类方法、静态方法

3、三大方法总结

静态属性(property): 实例属性和类属性都可以访问(属性都能用,但不能传入参数

类方法(classmethod): 只访问类属性,不能访问实例的属性(类属性能用,传入参数也能用

静态方法: 不能访问类属性,也不能访问实例属性(只能使用函数调用时传入的参数

类的组合 1、用法分析 class Head: pass class Hand: pass class Foot: pass class Trunk: pass class Body: def __init__(self,name,id_num): self.name= name self.id_num= id_num #用另外一个类来当属性,就称为类的组合 self.head= Head() self.hand= Hand() self.foot= Foot() self.trunk= Trunk() #实例化 p1 = Body('1234556789','乌索普') print(p1.__dict__) #另外的类也包括在Body类的属性里面了

运行结果:
代码分析

2、面试案例分析 #公司类 class Company: def __init__(self,name,location): #公司名字,公司位置 self.name= name self.location= location def hr_interview(self): #面试的动作 print('%s 正在开展面试' %self.name) #职位类 class Position: def __init__(self,name,salary,period,company): #4个形参 self.name= name self.salary= salary self.period= period self.company= company #实例化,存放不同公司的对象 v1 = Company('迪达拉','北京') v2 = Company('极界','南京') v3 = Company('木心丸','东京') v4 = Company('串串香','西京') vv = Position('熊二',10000,6,v1) #最后一个参数传入一个对象,表示公司 #调用对象 vv.company.hr_interview() #输出组合后的结果,直接调用对象 #让用户实现选择: #直接输出的语句,表示提示用户可供的选择 print("1-->迪达拉,北京\n2-->极界,南京\n3-->木心丸,东京\n4-->串串香,西京") while True: menu = { '1':v1, '2':v2, '3':v3, } choice = input('请选择公司>>>') com_obj = menu[choice] #让用户输入的当做键来匹配对应的值,即那几个公司信息 choice2 = input('请选择职位名>>>') choice3 = input('请选择薪资>>>') choice4 = input('请选择周期>>>') new_pt = Position(choice2,choice3,choice4,com_obj) #创建一个职位的对象 #输出对应的信息,通过类的属性来输出(包括组合属性) print('{}公司位置在{}\n您应聘的职位是{},薪资{},周期{}'.format(new_pt.company.name, new_pt.company.location, new_pt.name, new_pt.salary, new_pt.period))

运行结果:
应聘系统案例
什么时候用类的组合呢?
就是当类之间有显著不同,并且较小的类是较大的类所需要的组件时。
另外,还有类的继承与多态,与类的组合不同的另一个概念,将在后续文章进行总结


作者:栀丶子



类方法 方法 属性 静态 静态方法 Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号