1、面向对象
1、使用对象组织数据
- 在程序中设计表格,我们称之为:设计类(class)
2.在程序中打印生产表格,我们称之为:创建对象
-
在程序中填写表格,我们称之为:对象属性赋值
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 而做