学习python仅此一篇就够了(封装,继承,多态)

发布时间:2024年01月16日

面向对象的三大特性

基于模板类去创建实体对象,使用对象完成功能开发。

封装

封装表示的是,将现实世界事物的:

  • 属性

  • 行为

封装到类中,描述为:

  • 成员变量

  • 成员方法

私有成员:既然现实事物有不公开的属性和行为,那么作为现实事物在程序中映射的类,也应该支持。在类中提供仅供内部使用的属性和方法,而不对外开放。

定义私有成员的方式:

  • 私有成员变量:变量名以__开头

  • 私有成员方法:方法名以__开头

#设计一个类
class studet:
    name = None
    gender = None
    age = None
    native_place = None


#创建一个对象(类比生活中:打印一张登记表)
stu_1 = studet()

#对象属性进行赋值
stu_1.name = "wyx"
stu_1.gender = "女"
stu_1.age = "22"
stu_1.native_place = "中国"

#获取对象中记录的信息
print(stu_1.name)
print(stu_1.age)
print(stu_1.gender)
print(stu_1.native_place)
#设计一个闹钟类
class clock:
    id = None
    price = None

    def ring(self):
        import winsound
        winsound.Beep(2000,3000)

#构建2个闹钟对象并让他工作
clock1 = clock()
clock1.id = "001"
clock1.price = 10
print(f"闹钟ID为{clock1.id},价格为{clock1.price}")
clock1.ring()
class phone:

    __is_5g_enable = False

    def __check_5g(self):
        if self.__is_5g_enable:
            print("5g开启")
        else:
            print("5g关闭,使用4g网络")

    def call_by_5g(self):
        self.__check_5g()
        print("正在通话中")

PHONE = phone()
PHONE.call_by_5g()

继承

class 类名(父类名):
	类内容体
单继承
class phone:
    IMEI =  None
    producer = "AS"

    __is_5g_enable = False

    def __check_4g(self):
        print("4g开启")

class phone2023(phone):
    face = "001"

    def call_by_5g(self):
        print("2024新功能")


PHONE = phone2023()
print(phone.producer)
PHONE.call_by_5g()
多继承
class 类名(父类1,父类2,....父类N):
	类内容体
class NFC:
    nfc_type = "第五代"
    producer = "AS"

    def read_card(self):
        print("读卡")

    def write_card(self):
        print("写卡")


class remote:  # 远程遥控
    rc_type = "红外遥控"

    def control(self):
        print("红外遥控")


class My_phone(phone, NFC, remote):
    pass

ph = My_phone()
ph.read_card()
ph.write_card()
ph.control()
复写

子类继承父类的成员属性和成员方法后,如果对其"不满意",那么可以进行复写。

即:在子类中重新定义同名的属性或方法即可。

class phone():
    IMEI = None
    producer = "WYX"

    def call_by_5g(self):
        print("使用5g网络进行通话")

#定义子类,复写父类成员
class myphone(phone):
    producer = "SXX"

    def call_by_5g(self):
        print("开启单核模式")
        print("使用5g通话")

Phone = myphone()
Phone.call_by_5g()
print(Phone.producer)
调用父类同名成员

一旦复写父类成员,那么类对象调用成员的时候,就会调用复写后的新成员,如果需要使用被复写的父类的成员,需要特殊的调用方式:

方式1:

  • 调用父类成员

使用成员变量:父类名.成员变量

使用成员方法:父类名.成员方法(self)

方式2:

  • 使用super()调用父类成员

使用成员变量:super().成员变量

使用成员方法:super().成员方法()

class phone():
    IMEI = None
    producer = "WYX"

    def call_by_5g(self):
        print("使用5g网络进行通话")

#定义子类
class myphone(phone):
    producer = "SXX"

    def call_by_5g(self):
        print("开启单核模式")
        #方法1
        # print(f"父类的厂商是:{phone.producer}") #父类的厂商,WYX
        #方法2
        print(f"父类的厂商,{super().producer}")  #父类的厂商,WYX
        phone.call_by_5g(self)


Phone = myphone()
Phone.call_by_5g()
print(Phone.producer)

类型注解

变量的类型注解

基础语法: 变量:类型

var1:int = 10
var2:float = 0.1
var3:str = "wyx"

class student:
    pass
stu : student = student()

list:list = [1,2,3]

tuple:tuple[int, str] = (1, "wyx")
函数和方法类型注解
#对形参进行类型注解
def add(x:int, y:int):
    return x + y
#对返回值进行类型注解
def func(data :list) -> list:
    return data

多态

多态指的是 多种状态,即完成某个行为时,使用不同的对象会得到不同的状态。

class Animal:
    def speak(self):
        pass

class dog(Animal):
    def speak(self):
        print("wangwangwang")

class cat(Animal):
    def speak(self):
        print("miaomioamiao")

def noise(animal :Animal):
    animal.speak()

DOG = dog()
CAT = cat()

noise(DOG)
noise(CAT) #wangwangwang
        #miaomioamiao
抽象类

包含抽象方法的类,称之为抽象类,没有具体实现的方法(pass)

配合多态,完成

  • 抽象的父类设计

  • 具体的子类实现

class AC:
    def wind(self):
        "制冷"
        pass

    def hot(self):
        "制热"
        pass

    def swing(self):
        "摆风"
        pass


class media(AC):
    def wind(self):
        print("美帝制冷")

    def hot(self):
        print("美的制热")

    def swing(self):
        print("摆风")


class geli(AC):
    def wind(self):
        print("格力制冷")

    def hot(self):
        print("格力制热")

    def swing(self):
        print("格力摆风")


def make(ac: AC):
    ac.wind()


media_ac = media()
geli_ac = geli()

make(media_ac)
make(geli_ac)
美帝制冷
格力制冷

文章来源:https://blog.csdn.net/m0_66011019/article/details/135637385
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。