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()

类的建立,实例化、继承
浙公网安备 33010602011771号