Python学习笔记6——面向对象

1、面向对象

1、使用对象组织数据

  1. 在程序中设计表格,我们称之为:设计类(class)

        2.在程序中打印生产表格,我们称之为:创建对象

  1. 在程序中填写表格,我们称之为:对象属性赋值

2、成员方法

2.1 类的定义和使用

class 类名称:

类的属性

类的行为

创建类对象的语法:

对象 = 类名称()

2.2 成员变量和成员方法

可以看出,类中:

不仅可以定义属性用来记录数据

也可以定义函数,用来记录行为

其中:

类中定义的属性(变量),我们称之为:成员变量

类中定义的行为(函数),我们称之为:成员方法

2.3 成员方法的定义语法

在类中定义成员方法和定义函数基本一致,但仍有细微区别:

在方法定义的参数列表中,有一个:self关键字 self关键字是成员方法定义的时候,必须填写的。

它用来表示类对象自身的意思

当使用类对象调用方法的是,self会自动被python传入

在方法内部,想要访问类的成员变量,必须使用self

self出现在形参列表中,但是不占用参数位置,无需理会

eg:

"""
演示面向对象类中的成员方法定义和使用
"""
# 定义一个带有成员方法的类
class Student:
    name = None     # 学生的姓名

    def say_hi(self):
        print(f"大家好呀,我是{self.name},欢迎大家多多关照")


    def say_hi2(self, msg):
        print(f"大家好,我是:{self.name},{msg}")


stu = Student()
stu.name = "周杰轮"
stu.say_hi2("哎哟不错哟")

stu2 = Student()
stu2.name = "林俊节"
stu2.say_hi2("小伙子我看好你")

3、类和对象

基于类创建对象的语法:

        对象名=类名称()

类是程序中的“设计图纸” 对象是基于图纸生产的具体实体

        面向对象编程就是,使用对象进行编程。 即,设计类,基于类创建对象,并使用对象来完成具体的工作

4、构造方法

Python类可以使用:init()方法,称之为构造方法。

可以实现:

        在创建类对象(构造类)的时候,会自动执行。

        在创建类对象(构造类)的时候,将传入参数自动传递给init方法使用。

构造方法注意事项:

        构造方法名称:__ init__ 千万不要忘记init前后都有2个下划线

        构造方法也是成员方法,不要忘记在参数列表中提供:self

        在构造方法内定义成员变量,需要使用self关键字

eg:

# 演示使用构造方法对成员变量进行赋值
# 构造方法的名称:__init__

class Student:

    def __init__(self, name, age ,tel):
        self.name = name
        self.age = age
        self.tel = tel
        print("Student类创建了一个类对象")

stu = Student("周杰轮", 31, "18500006666")
print(stu.name)
print(stu.age)
print(stu.tel)

几种常用的类内置方法

5、封装

 5.1 封装的概念

将现实世界事物在类中描述为属性和方法,即为封装。

现实事物有部分属性和行为是不公开对使用者开放的。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了

5.2 成员变量和成员方法的命名均以__作为开头即可

5.3 私有成员的访问限制?

        类对象无法访问私有成员

        类中的其它成员可以访问私有成员

eg:

# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
    __current_voltage = 0.5        # 当前手机运行电压


    def __keep_single_core(self):
        print("让CPU以单核模式运行")


    def call_by_5g(self):
        if self.__current_voltage >= 1:
            print("5g通话已开启")
        else:
            self.__keep_single_core()
            print("电量不足,无法使用5g通话,并已设置为单核运行进行省电。")


phone = Phone()
phone.call_by_5g()

6、继承

继承就是一个类,继承另外一个类的成员变量和成员方法

语法:

子类构建的类对象,可以

        有自己的成员变量和成员方法

        使用父类的成员变量和成员方法

a. 单继承和多继承

        单继承:一个类继承另一个类

        多继承:一个类继承多个类,按照顺序从左向右依次继承

        多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承

b.  pass是占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思

c、复写和使用父类成员

复写:子类继承父类的成员属性和成员方法后,如果对其“不满意”,那么可以进行复写。 即:在子类中重新定义同名的属性或方法即可。

d、调用父类同名成员:

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

方式1: 调用父类成员

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

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

方式2:

使用super()调用父类成员      

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

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

注意:只可以在子类内部调用父类的同名成员,子类的实体类对象调用默认是调用子类复写的

eg:

# 演示单继承
class Phone:
    IMEI = None     # 序列号
    producer = "ITCAST" # 厂商


    def call_by_4g(self):
        print("4g通话")


class Phone2022(Phone):
    face_id = "10001"       # 面部识别ID


    def call_by_5g(self):
        print("2022年新功能:5g通话")


phone = Phone2022()
print(phone.producer)
phone.call_by_4g()
phone.call_by_5g()
# 演示多继承
class NFCReader:
    nfc_type = "第五代"
    producer = "HM"

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

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


class RemoteControl:
    rc_type = "红外遥控"

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


class MyPhone(Phone, NFCReader, RemoteControl):
    pass


phone = MyPhone()
phone.call_by_4g()
phone.read_card()
phone.write_card()
phone.control()

print(phone.producer)

7、类型注解

在代码中涉及数据交互之时,对数据类型进行显式的说明,可以帮助:

PyCharm等开发工具对代码做类型推断协助做代码提示

开发者自身做类型的备注

类型注解支持:

变量的类型注解

函数(方法)的形参和返回值的类型注解

变量的类型注解语法

语法1: 变量: 类型

语法2: 在注释中,# type: 类型

注: 类型注解只是提示性的,并非决定性的。数据类型和注解类型无法对应也不会导致错误

a、函数(方法)的类型注解 - 形参注解

# 对形参进行类型注解
def add(x: int, y: int):
    return x + y

b、函数(方法)的类型注解 - 返回值注解

# 对返回值进行类型注解
def func(data: list) -> list:
    return data

注意,返回值类型注解的符号使用: ->

c、Union类型

 使用Union可以定义联合类型注解

Union的使用方式

导包:from typing import Union

使用:Union[类型, ......, 类型]

8、多态

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

比如

        函数(方法)形参声明接收父类对象

        实际传入父类的子类对象进行工作

即:

        以父类做定义声明

        以子类做实际工作

        用以获得同一行为, 不同状态

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

抽象类的作用 :多用于做顶层设计(设计标准),以便子类做具体实现。 也是对子类的一种软性约束,要求子类必须复写(实现)父类的一些方法 并配合多态使用,获得不同的工作状态。

eg:

class Animal:
    def speak(self):
        pass


class Dog(Animal):
    def speak(self):
        print("汪汪汪")


class Cat(Animal):
    def speak(self):
        print("喵喵喵")


def make_noise(animal: Animal):
    """制造点噪音,需要传入Animal对象"""
    animal.speak()


# 演示多态,使用2个子类对象来调用函数
dog = Dog()
cat = Cat()

make_noise(dog)
make_noise(cat)


# 演示抽象类
class AC:
    def cool_wind(self):
        """制冷"""
        pass

    def hot_wind(self):
        """制热"""
        pass

    def swing_l_r(self):
        """左右摆风"""
        pass


class Midea_AC(AC):
    def cool_wind(self):
        print("美的空调制冷")

    def hot_wind(self):
        print("美的空调制热")

    def swing_l_r(self):
        print("美的空调左右摆风")


class GREE_AC(AC):
    def cool_wind(self):
        print("格力空调制冷")

    def hot_wind(self):
        print("格力空调制热")

    def swing_l_r(self):
        print("格力空调左右摆风")


def make_cool(ac: AC):
    ac.cool_wind()


midea_ac = Midea_AC()
gree_ac = GREE_AC()


make_cool(midea_ac)
make_cool(gree_ac)

该学习笔记由观看 黑马程序员python教程,8天python从入门到精通,学python看这套就够了-哔哩哔哩】 https://b23.tv/fDS6HWr  而做

  • 12
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值