面向对象编程,是许多编程语言都支持的一种编程思想。简单理解是:基于模板(类)去创建实体(对象),使用对象完成功能开发。面向对象的三大特征:1、封装; 2、继承; 3、多态。

一、封装

python3 对象是否存在 python对象的三个特征_父类

二、继承

python3 对象是否存在 python对象的三个特征_python3 对象是否存在_02

语法将父类的成员变量和成员方法拿来使用。

#单继承
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、复写

python3 对象是否存在 python对象的三个特征_python3 对象是否存在_03

python3 对象是否存在 python对象的三个特征_python_04

参考案例:

#定义一个手机类
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、类型注解

python3 对象是否存在 python对象的三个特征_python_05

语法:一般无法看出类型的时候加上类型注释。(注意:仅仅是个备注,不影响程序运行使用)

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联合注解:变量、函数(方法)、形参和返回值都可以

python3 对象是否存在 python对象的三个特征_多态_06

参考案例:

# 7、使用union进行联合注解
dict_03:dict[str,Union[str,int]]

三、多态

什么是多态?

      多态指的是,同一个行为,使用不同的对象获得不同的状态。

      如,定义函数(方法),通过类型注解声明需要父类对象,实际传入子类对象进行工作,从而获得不同的工作状态。

什么是抽象类(接口)

      包含抽象方法的类,称之为抽象类。抽象方法是指:没有具体实现的方法(psss)称之为抽象方法。

抽象类的作用

     多用于做顶层设计(设计标准),以便子类做具体实现。

也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法

并多态获得不同的工作状态。

总结:1、抽象的父类设计(设计标准); 2、具体的子类实现(实现标准)。

python3 对象是否存在 python对象的三个特征_python_07

python3 对象是否存在 python对象的三个特征_父类_08

参考案例:

###多态
#定义一个空调抽象类
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)