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

冷不防 2023-07-14 13:00 57阅读 0赞

文章目录

      • 类的三大方法
          • 1、静态属性
          • 2、类方法、静态方法
          • 3、三大方法总结
      • 类的组合
          • 1、用法分析
          • 2、面试案例分析

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

类的三大方法

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

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

运行结果:
静态属性

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

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

3、三大方法总结

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

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

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

类的组合

1、用法分析
  1. class Head:
  2. pass
  3. class Hand:
  4. pass
  5. class Foot:
  6. pass
  7. class Trunk:
  8. pass
  9. class Body:
  10. def __init__(self,name,id_num):
  11. self.name= name
  12. self.id_num= id_num
  13. #用另外一个类来当属性,就称为类的组合
  14. self.head= Head()
  15. self.hand= Hand()
  16. self.foot= Foot()
  17. self.trunk= Trunk()
  18. #实例化
  19. p1 = Body('1234556789','乌索普')
  20. print(p1.__dict__) #另外的类也包括在Body类的属性里面了

运行结果:
代码分析

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

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

发表评论

表情:
评论列表 (有 0 条评论,57人围观)

还没有评论,来说两句吧...

相关阅读