2022年 11月 6日

Python面向对象案例汇总

Python面向对象案例汇总

简介

Python是一门面向对象的语言,用这种思想为指导设计的程序,把数据和对数据的操作封装在一起组成类,通过类来创建对象,通过对象之间的交互来实现程序的功能。

定义个空的类

  1. class FirstClass:
  2. pass
  3. if __name__ == '__main__':
  4. c = FirstClass()
  5. print(c)
  6. #结果
  7. <__main__.FirstClass object at 0x0000022128E17F70>

定义个学生类(仅属性)

  1. class Student:
  2. # 构造方法(初始化),这里传入name和age两个参数
  3. def __init__(self,name,age):
  4. self.name=name
  5. self.age=age
  6. if __name__ == '__main__':
  7. s = Student('沈亮',30);
  8. #显示对象内存地址
  9. print(s)
  10. # 访问对象里的name和age属性
  11. print("{}您的年龄是:{}岁".format(s.name,s.age))
  12. #结果
  13. <__main__.Student object at 0x0000022C7CAF7700>
  14. 沈亮您的年龄是:30

定义个学生类(属性及方法)

  1. class Student:
  2. # 构造方法(初始化),这里传入name和age两个参数
  3. def __init__(self,name,age):
  4. self.name=name
  5. self.age=age
  6. def sayInfo(self): #通过对象里的方法访问name和age属性
  7. print("{}您的年龄是:{}岁".format(s.name, s.age))
  8. if __name__ == '__main__':
  9. s = Student('沈亮',30);
  10. #显示对象内存地址
  11. print(s)
  12. # 访问对象方法
  13. s.sayInfo()
  14. #结果
  15. <__main__.Student object at 0x000001C7F6A47700>
  16. 沈亮您的年龄是:30

方法内嵌套类

  1. #方法里嵌套Converter类,如果该对象不存在则创建,最终函数通过Converter对象里的convert方法返回(完成分数和等级的转换)
  2. def score2level(score,converter=None):
  3. class Converter:
  4. def convert(self,score):
  5. level='C'
  6. if score>=80:
  7. level='A'
  8. elif 60<score <80:
  9. level = 'B'
  10. return level
  11. if not converter:
  12. c = Converter()
  13. return c.convert(score)
  14. if __name__ == '__main__':
  15. score=75
  16. print("您的分数是{0},对应的等级是{1}".format(score,score2level(score)))
  17. #结果
  18. 您的分数是75,对应的等级是B

计算二维平面里点到点距离

  1. import math
  2. class Point:
  3. #初始化点的坐标,默认在原点(即x=0,y=0)
  4. def __init__(self,x=0,y=0):
  5. self.move(x,y)
  6. #设置点的坐标为(x,y)
  7. def move(self,x,y):
  8. self.x=x
  9. self.y=y
  10. #将点的坐标重置到(0,0)
  11. def reset(self):
  12. self.move(0,0)
  13. #计算两点之间的距离(勾股定理)
  14. def calculateDistance(self,otherPoint):
  15. return math.sqrt(pow((self.x-otherPoint.x),2)+pow((self.y-otherPoint.y),2))
  16. if __name__ == '__main__':
  17. point1 = Point(3,0)
  18. point2 = Point(0,4)
  19. #计算点point1和点point2的距离
  20. print(point1.calculateDistance(point2))
  21. #计算点point3=的横坐标x、纵坐标y
  22. point3=Point(4,6)
  23. print(point3.x, point3.y)
  24. #重置点point3,即作为为坐标原点
  25. point3.reset()
  26. print(point3.x,point3.y)
  27. #结果
  28. 5.0
  29. 4 6
  30. 0 0

私有属性及私有方法

  1. class Student:
  2. # 构造方法(初始化),这里传入name、age、__level三个参数,其中__level是私有属性
  3. def __init__(self,name,age,level):
  4. self.name=name
  5. self.age=age
  6. self.__level=level
  7. def sayInfo(self): #通过对象里的方法访问name和age属性
  8. print("{}您的年龄是:{}岁".format(self.name, self.age))
  9. #定义私有方法
  10. def __getLevel(self):
  11. print("{}您的等级是:{}".format(self.name, self._Student__level))
  12. if __name__ == '__main__':
  13. s= Student('ShenLiang',25,'A')
  14. #访问私有方法时,需要加_类名__方法名
  15. s._Student__getLevel()
  16. #结果
  17. ShenLiang您的等级是:A

查看对象的自定义属性及其值

  1. class Student:
  2. # 构造方法(初始化),这里传入name、age、__level三个参数,其中__level是私有属性
  3. def __init__(self,name,age,level):
  4. self.name=name
  5. self.age=age
  6. self.__level=level
  7. def sayInfo(self): #通过对象里的方法访问name和age属性
  8. print("{}您的年龄是:{}岁".format(self.name, self.age))
  9. #定义私有方法
  10. def __getLevel(self):
  11. print("{}您的等级是:{}".format(self.name, self._Student__level))
  12. if __name__ == '__main__':
  13. s= Student('ShenLiang',25,'A')
  14. # 输出类里用户自定义的属性、方法
  15. print([v for v in dir(s) if not v.startswith('__')])
  16. # 输出对象里用户自定义的属性及其值
  17. for item in vars(s):
  18. print(item,":",vars(s)[item])
  19. #结果
  20. ['_Student__getLevel', '_Student__level', 'age', 'name', 'sayInfo']
  21. name : ShenLiang
  22. age : 25
  23. _Student__level : A

类变量及类方法的使用

  1. class Student:
  2. cnt =0
  3. # 初始化方法
  4. def __init__(self,name,score,level):
  5. self.name = name
  6. self.score = score
  7. self.__level = level
  8. Student.cnt +=1
  9. def sayScore(self): #对象方法操作对象属性
  10. print("{0}\t的分数是:{1}".format(self.name,self.__level))
  11. def __getLevel(self): #私有方法的定义
  12. print("{0}当前的等级是:".format(self.name,self.__level))
  13. @classmethod #类方法操作类属性
  14. def printCnt(cls):
  15. print(cls.cnt)
  16. if __name__ == '__main__':
  17. s1=Student('Shenliang',30,'A')
  18. s2=Student('Liangshen',20,'B')
  19. print('当前学生数:\t',Student.cnt)
  20. print("对象方式调用:") #s1和s2对象调结果都是2
  21. s1.printCnt() #s2.printCnt()
  22. #结果
  23. 当前学生数: 2
  24. 对象方式调用:
  25. 2

静态变量的使用

  1. class Student:
  2. cnt =0
  3. # 初始化方法
  4. def __init__(self,name,score,level):
  5. self.name = name
  6. self.score = score
  7. self.__level = level
  8. Student.cnt +=1
  9. def sayScore(self): #对象方法操作对象属性
  10. print("{0}\t的分数是:{1}".format(self.name,self.__level))
  11. def __getLevel(self): #私有方法的定义
  12. print("{0}当前的等级是:".format(self.name,self.__level))
  13. @classmethod #类方法操作类属性
  14. def printCnt(cls):
  15. print(cls.cnt)
  16. @staticmethod
  17. def add(a,b):
  18. return(a+b)
  19. if __name__ == '__main__':
  20. s1=Student('Shenliang',30,'A')
  21. s2=Student('Liangshen',20,'B')
  22. print('两数相加的结果是:\t',Student.add(20,30))
  23. 注:静态方法不可以操作对象实例属性及方法。

属性装饰器

  1. class Student:
  2. cnt =0
  3. # 初始化方法
  4. def __init__(self,name,score,level):
  5. self.name = name
  6. self.score = score
  7. self.__level = level
  8. Student.cnt +=1
  9. def sayScore(self): #对象方法操作对象属性
  10. print("{0}\t的分数是:{1}".format(self.name,self.__level))
  11. def __getLevel(self): #私有方法的定义
  12. print("{0}当前的等级是:".format(self.name,self.__level))
  13. @property
  14. def level(self):
  15. return self.__level
  16. if __name__ == '__main__':
  17. s1=Student('Shenliang',30,'C')
  18. print("{0}您的等级是{1}".format(s1.name,s1.level))
  19. #结果
  20. Shenliang您的等级是C