Python面向对象案例汇总
简介
Python是一门面向对象的语言,用这种思想为指导设计的程序,把数据和对数据的操作封装在一起组成类,通过类来创建对象,通过对象之间的交互来实现程序的功能。
定义个空的类
- class FirstClass:
- pass
- if __name__ == '__main__':
- c = FirstClass()
- print(c)
-
- #结果
- <__main__.FirstClass object at 0x0000022128E17F70>
定义个学生类(仅属性)
- class Student:
- # 构造方法(初始化),这里传入name和age两个参数
- def __init__(self,name,age):
- self.name=name
- self.age=age
-
- if __name__ == '__main__':
- s = Student('沈亮',30);
- #显示对象内存地址
- print(s)
- # 访问对象里的name和age属性
- print("{}您的年龄是:{}岁".format(s.name,s.age))
-
- #结果
- <__main__.Student object at 0x0000022C7CAF7700>
- 沈亮您的年龄是:30岁
定义个学生类(属性及方法)
- class Student:
- # 构造方法(初始化),这里传入name和age两个参数
- def __init__(self,name,age):
- self.name=name
- self.age=age
- def sayInfo(self): #通过对象里的方法访问name和age属性
- print("{}您的年龄是:{}岁".format(s.name, s.age))
-
- if __name__ == '__main__':
- s = Student('沈亮',30);
- #显示对象内存地址
- print(s)
- # 访问对象方法
- s.sayInfo()
-
- #结果
- <__main__.Student object at 0x000001C7F6A47700>
- 沈亮您的年龄是:30岁
方法内嵌套类
- #方法里嵌套Converter类,如果该对象不存在则创建,最终函数通过Converter对象里的convert方法返回(完成分数和等级的转换)
- def score2level(score,converter=None):
- class Converter:
- def convert(self,score):
- level='C'
- if score>=80:
- level='A'
- elif 60<score <80:
- level = 'B'
- return level
- if not converter:
- c = Converter()
- return c.convert(score)
-
-
-
-
- if __name__ == '__main__':
- score=75
- print("您的分数是{0},对应的等级是{1}".format(score,score2level(score)))
-
- #结果
- 您的分数是75,对应的等级是B
计算二维平面里点到点距离
- import math
- class Point:
-
- #初始化点的坐标,默认在原点(即x=0,y=0)
- def __init__(self,x=0,y=0):
- self.move(x,y)
- #设置点的坐标为(x,y)
- def move(self,x,y):
- self.x=x
- self.y=y
-
- #将点的坐标重置到(0,0)
- def reset(self):
- self.move(0,0)
- #计算两点之间的距离(勾股定理)
- def calculateDistance(self,otherPoint):
- return math.sqrt(pow((self.x-otherPoint.x),2)+pow((self.y-otherPoint.y),2))
-
-
- if __name__ == '__main__':
- point1 = Point(3,0)
- point2 = Point(0,4)
- #计算点point1和点point2的距离
- print(point1.calculateDistance(point2))
- #计算点point3=的横坐标x、纵坐标y
- point3=Point(4,6)
- print(point3.x, point3.y)
- #重置点point3,即作为为坐标原点
- point3.reset()
- print(point3.x,point3.y)
-
- #结果
- 5.0
- 4 6
- 0 0
私有属性及私有方法
- class Student:
- # 构造方法(初始化),这里传入name、age、__level三个参数,其中__level是私有属性
- def __init__(self,name,age,level):
- self.name=name
- self.age=age
- self.__level=level
- def sayInfo(self): #通过对象里的方法访问name和age属性
- print("{}您的年龄是:{}岁".format(self.name, self.age))
- #定义私有方法
- def __getLevel(self):
- print("{}您的等级是:{}".format(self.name, self._Student__level))
-
- if __name__ == '__main__':
- s= Student('ShenLiang',25,'A')
- #访问私有方法时,需要加_类名__方法名
- s._Student__getLevel()
-
- #结果
- ShenLiang您的等级是:A
查看对象的自定义属性及其值
- class Student:
- # 构造方法(初始化),这里传入name、age、__level三个参数,其中__level是私有属性
- def __init__(self,name,age,level):
- self.name=name
- self.age=age
- self.__level=level
- def sayInfo(self): #通过对象里的方法访问name和age属性
- print("{}您的年龄是:{}岁".format(self.name, self.age))
- #定义私有方法
- def __getLevel(self):
- print("{}您的等级是:{}".format(self.name, self._Student__level))
-
- if __name__ == '__main__':
- s= Student('ShenLiang',25,'A')
- # 输出类里用户自定义的属性、方法
- print([v for v in dir(s) if not v.startswith('__')])
-
- # 输出对象里用户自定义的属性及其值
- for item in vars(s):
- print(item,":",vars(s)[item])
-
- #结果
- ['_Student__getLevel', '_Student__level', 'age', 'name', 'sayInfo']
- name : ShenLiang
- age : 25
- _Student__level : A
类变量及类方法的使用
- class Student:
- cnt =0
- # 初始化方法
- def __init__(self,name,score,level):
- self.name = name
- self.score = score
- self.__level = level
- Student.cnt +=1
- def sayScore(self): #对象方法操作对象属性
- print("{0}\t的分数是:{1}".format(self.name,self.__level))
-
- def __getLevel(self): #私有方法的定义
- print("{0}当前的等级是:".format(self.name,self.__level))
-
- @classmethod #类方法操作类属性
- def printCnt(cls):
- print(cls.cnt)
- if __name__ == '__main__':
- s1=Student('Shenliang',30,'A')
- s2=Student('Liangshen',20,'B')
- print('当前学生数:\t',Student.cnt)
- print("对象方式调用:") #s1和s2对象调结果都是2
- s1.printCnt() #s2.printCnt()
-
- #结果
- 当前学生数: 2
- 对象方式调用:
- 2
静态变量的使用
- class Student:
- cnt =0
- # 初始化方法
- def __init__(self,name,score,level):
- self.name = name
- self.score = score
- self.__level = level
- Student.cnt +=1
- def sayScore(self): #对象方法操作对象属性
- print("{0}\t的分数是:{1}".format(self.name,self.__level))
-
- def __getLevel(self): #私有方法的定义
- print("{0}当前的等级是:".format(self.name,self.__level))
-
- @classmethod #类方法操作类属性
- def printCnt(cls):
- print(cls.cnt)
- @staticmethod
- def add(a,b):
- return(a+b)
-
- if __name__ == '__main__':
- s1=Student('Shenliang',30,'A')
- s2=Student('Liangshen',20,'B')
- print('两数相加的结果是:\t',Student.add(20,30))
-
- 注:静态方法不可以操作对象实例属性及方法。
属性装饰器
- class Student:
- cnt =0
- # 初始化方法
- def __init__(self,name,score,level):
- self.name = name
- self.score = score
- self.__level = level
- Student.cnt +=1
- def sayScore(self): #对象方法操作对象属性
- print("{0}\t的分数是:{1}".format(self.name,self.__level))
-
- def __getLevel(self): #私有方法的定义
- print("{0}当前的等级是:".format(self.name,self.__level))
-
- @property
- def level(self):
- return self.__level
-
- if __name__ == '__main__':
- s1=Student('Shenliang',30,'C')
- print("{0}您的等级是{1}".format(s1.name,s1.level))
-
- #结果
- Shenliang您的等级是C