Python面向对象(类)

一、面向对象程序设计

​ 1、面向对象程序设计

​ 1.1一种程序设计范式

​ 1.2程序由对象组成,对象包含公开的功能和隐藏的功能

​ 1.3对象是数据与相关行为得集合

​ 2、类:对象的类型,构造对象的模板

二、自定义类

​ 1、创建类

class ClassName:
    '''类的信息'''

​ 2、类方法

​ def来定义方法

​ 方法必须含参数self,且为第一个参数

​ self并非python关键字,可写其他名称,但惯例写作self

​ self代表类的实例,在调用时不必传入相应参数

​ 同名的数据属性会覆盖方法

​ 属性方法前加__ 约束外部访问 仅仅是约定

class Constomer:
    #init初始化方法,类实例化时会自动调用
 	#有seif参数,也可有额外的参数
    #只能返回None 
    #常用
    def __init__(self,name):
        self.name=name

​ 3、实例化类、调用类方法

#顾客类
class Consumer:
	def __init__(self,name):
		self.name=name
#餐馆类
class Restraunt:
	''' REstraunt class
	properties: name, location
	methods: checkin, checkout
	'''
	#餐馆编号记录  类的数据
	RID=0
	#初始化  名称、地址、编号、顾客列表
	def __init__(self,name,location):
		self.name=name
		self.location=location
		self.id=Restraunt.RID
		self.consumer_list=[]
		Restraunt.RID+=1
	#添加顾客
	def chekin(self,c:Consumer):
		self.consumer_list.append(c)
	#删除顾客
	def checkout(self,c:Consumer):
		self.consumer_list.remove(c)
	#输出顾客姓名
	def print_consumers(self):
		for con in self.consumer_list:
			print(con.name)

def main():
	#实例化类,调用类方法
	print(Restraunt.RID)
	c1=Consumer('Akam')
	c2=Consumer('Dice')
	c3=Consumer('Blaze')
	r1=Restraunt('KFC','11,12')
	r2=Restraunt('McDoload','11,12')
	r1.chekin(c1)
	r1.chekin(c2)
	r1.checkout(c1)
	r2.chekin(c1)
	r2.chekin(c3)
	print(r1.id)
	print(r2.id)
	r1.print_consumers()

if __name__=='__main__':main()

三、类的继承

​ 继承其他类的类称为派生类,被继承为基类

​ 1、继承语法

class Dclassname(Bclassname):
    

​ 2、重载

​ 一个类里,方法名字相同,参数不同。重载是用来处理不同数据类型的手段,可以解决可变参数类型和个数。

​ 由于 python 可以接受任何类型的参数,可以接受缺省参数,所以不需要函数重载

​ python 有运算符重载

​ 3、重写

​ 子类对父类方法重写,方法覆盖

​ 4、子类调用父类函数

#法1  类调用
class C(A,B):
	def fu(self):
		#调用父类方法括号要加self,表明这是类调用
		A.fu(self)
		print('ccc')
#法2  super
class C(A,B):
	def fu(self):
		super().fu()
		print('ccc')
#super()方法调用A类,默认多继承从左到右顺序调用
#要调用B类,super修改
class C(A,B):
	def fu(self):
		super(C,self).fu()
		super(A,self).fu()
		print('ccc')
super(C,self).fu()		#调用最左边的方法
super(A,self).fu()		#调用A类后面的的方法
#调用哪个只需要写前一个就行

​ 5、案例

class People:
	#人的类,姓名、身高、年龄
	def __init__(self,name,height,age):
		self.__name=name
		self.__height=height
		self.__age=age
	def get_name(self):
		return self.__name
	def set_name(self,name):
		self.__name=name
	def get_height(self):
		return self.__height
	def set_height(self,height):
		self.__height=height
	def get_age(self):
		return self.__age
	def set_age(self,age):
		self.__age=age
	#获取信息
	def print_info(self):
		print('Name:{},Age:{},Height:{}'.\
			format(self.get_name(),self.get_age(),self.get_height()))
	#运算符重载
	def __add__(self,other):
		return self.get_height()+other.get_height()

class Career():
	#职业类
	def __init__(self,topic):
		self.__topic=topic
	def get_topic(self):
		return self.__topic
	def set_topic(self,topic):
		self.__topic=topic
	def speak(self):
		print("the career is {}".format(self.get_topic()))

class Student(People,Career):
	#学生类,继承人的类,同时添加一些新的属性,并覆盖方法
	#初始化  添加新属性  
	def __init__(self,name,height,age,topic,ID,major):
		People.__init__(self,name,height,age)
		Career.__init__(self,topic)
		self.__ID=ID
		self.__major=major
	#添加的新方法
	def get_ID(self):
		return self.__ID
	def set_ID(self,ID):
		self.__ID=ID
	def get_major(self):
		return self.__major;
	def set_major(self,major):
		self.__major=major
	#方法覆盖
	def print_info(self):
		print('ID:{}, Name:{}, Major:{}, Age:{}, Height:{}'.\
			format(self.get_ID(),self.get_name(),self.get_major(), self.get_age(),self.get_height()))
	#方法重写  
	def speak(self):
		super(Student,self).print_info()
		super(Student,self).speak()


p1=People('Dnna',185,40)
s1=Student('Alice',185,35,'teacher',33060828,'chemistry')
print(s1)
print(p1+s1)
s1.speak()
s1.print_info()
posted @ 2022-05-08 12:00  Saint_Z  阅读(74)  评论(1)    收藏  举报