面向对象编程,是许多编程语言都支持的一种编程思想。简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。面向对象的三大特征:1、封装; 2、继承; 3、多态。
一、封装
二、继承
语法:将父类的成员变量和成员方法拿来使用。
#单继承
class 类名(父类名) :
类内容体
#多继承
class 类名(父类名1,父类名2,父类名3,父类名4...父类N) :
类内容体
多继承注意事项:
多个父类中,如果有同名的成员,那么默认以继承顺序(从左到右)为优先级。即:先继承的保留,后继承的被覆盖。
相关代码:
#定义一个手机类
from classPack.Nfc import Nfc
from classPack.Photo import Photo
#继承 Photo,Nfc 多继承
class Phone(Photo,Nfc):
#定义成员变量
name=None #名称
price=None #价格
# 定义成员方法
def p_info(self):
print(f"我是:{self.name},我的价格是:{self.price}")
#定义一个NFC功能
class Nfc:
type=None
is_open=None
def nfc_say(self):
print(f"我是NFC,我的类型是:{self.type},我的状态是:{self.is_open}")
#照相类
class Photo:
is_open=None #是否打开
f_type=None #功能
def photo_say(self):
print(f"大家好,我是照相机,我的状态是:{self.is_open},我的功能是:{self.f_type}")
2.2、复写
参考案例:
#定义一个手机类
from classPack.Nfc import Nfc
from classPack.Photo import Photo
#继承 Photo,Nfc 多继承
class Phone(Photo,Nfc):
#定义成员变量
name=None #名称
price=None #价格
# 定义成员方法
def p_info(self):
print(f"我是:{self.name},我的价格是:{self.price}")
#调用Phono中的成员变量或成员方法
Phone.photo_say(self)
super().nfc_say()
注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类复写的。
2.3、类型注解
语法:一般无法看出类型的时候加上类型注释。(注意:仅仅是个备注,不影响程序运行使用)
1、变量:类型
2、注释 #type:类型
3、union联合注解
代码:
import random
##注解
#1、为变量设置类型注解
var_01:int =None
var_02:str=None
var_03:float=None
#2、类对象类型注解
class Student:
pass #代表什么都不做处理
student:Student=Student()
#3、基础容器注解
list_01:list=[]
tuple_01:tuple=()
str_01:str=""
dict_01:dict={}
##详细注释
list_01:list[int]=[1,2,3]
dict_02:dict[str,int]={"key01":12,"key02":23}
#4、除了使用 变量:类型 还可以使用注释 #type:类型
var_03=random.randint(1,100) #type:int
函数(方法)注解:
语法:返回值类型注解->
def 函数方法名(形参:类型,...形参:类型)->返回值类型:
pass
参考案例:
#5、对形参进行注解
def fun_01(x:int,y:int):
return x+y
print(fun_01(2,3))
#6、对函数返回值进行注解
def fun_02(data:list)->list:
return data
list_01=[1,2,3]
print(fun_02(list_01))
Union联合注解:变量、函数(方法)、形参和返回值都可以
参考案例:
# 7、使用union进行联合注解
dict_03:dict[str,Union[str,int]]
三、多态
什么是多态?
多态指的是,同一个行为,使用不同的对象获得不同的状态。
如,定义函数(方法),通过类型注解声明需要父类对象,实际传入子类对象进行工作,从而获得不同的工作状态。
什么是抽象类(接口)
包含抽象方法的类,称之为抽象类。抽象方法是指:没有具体实现的方法(psss)称之为抽象方法。
抽象类的作用
多用于做顶层设计(设计标准),以便子类做具体实现。
也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法
并多态获得不同的工作状态。
总结:1、抽象的父类设计(设计标准); 2、具体的子类实现(实现标准)。
参考案例:
###多态
#定义一个空调抽象类
class Ac:
#制热功能
def make_hot(self):
pass
#制冷功能
def make_cool(self):
pass
#出风功能
def make_wind(self):
pass
#定义一个子类 美的
class Meidi_ac(Ac):
#复写父类的相关方法
# 制热功能
def make_hot(self):
print("我是美的空调的制热功能")
# 制冷功能
def make_cool(self):
print("我是美的空调的制冷功能")
# 出风功能
def make_wind(self):
print("我是美的空调的制风功能")
#定义一个子类 格力
class Gree_ac(Ac):
#复写父类的相关方法
# 制热功能
def make_hot(self):
print("我是格力空调的制热功能")
# 制冷功能
def make_cool(self):
print("我是格力空调的制冷功能")
# 出风功能
def make_wind(self):
print("我是格力空调的制风功能")
#定义在一个类中使用
class UseClass():
def use_cool(ac:Ac):
ac.make_cool()
#在类中使用 同一行为,不同状态
meidi_ac=Meidi_ac()
gree_ac=Gree_ac()
UseClass.use_cool(meidi_ac)
UseClass.use_cool(gree_ac)