参考黑马程序员Python教程,学习笔记。
第一节:初识对象
1.生活中或是程序中,我们都可以使用设计表格、生成表格、填写表格的形式组织数据。
2.进行对比,在程序中:
设计表格,称之为:设计类(class)
打印表格,称之为:创建对象
填写表格,称之为:对象属性赋值
实例代码:
# 1.设计一个类(类比设计表格)
class Student:
name = None #记录姓名
gender = None #性别
nationality = None #国籍
native_place = None #籍贯
age = None #年龄
# 2.创建一个对象(打印表格)
stu_1 = Student()
# 3.对象属性进行赋值(填写表格)
stu_1.name = "郭绍锐"
stu_1.gender = "女"
stu_1.nationality = "China"
stu_1.native_place = "河南省"
stu_1.age = "23"
# 4.获取对象中记录的信息
print(stu_1.name)
print(stu_1.gender)
print(stu_1.nationality)
print(stu_1.native_place)
print(stu_1.age)
第二节:成员方法
1.类是由哪两部分组成呢?
(1)类的属性,称之为:成员变量
(2)类的行为,称之为:成员方法
注意:函数是写在类外的,定义在类内部,我们称之为方法。
2.类和成员方法的定义语法
class 类名称:
成员变量
def 成员方法(self,参数列表)
成员方法体
对象 = 类名称()
3.self的作用
(1)表示类对象本身的意思
(2)只有通过self,成员方法才能访问类的成员变量
(3)self出现在形参列表中,但是不占用参数位置,无需理会
示例代码:
# 定义一个带有成员方法的类
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_hi()
stu2 = Student()
stu2.name = "林军杰"
stu2.say_hi2("小伙子,我看好你")
第三节:类和对象
1.现实世界的事物由什么组成?
属性和行为
类也可以包含属性和行为,所以使用类描述现实世界事物是非常合适的
2.类和对象的关系是什么?
类是程序中的“设计图纸”,对象是基于图纸生产的具体实体
3.什么是面向对象编程?
面向对象编程就是,使用对象进行编程
即设计类,基于类创建对象,并使用对象来完成具体的工作
示例代码:
# 类和对象
# 1. 掌握使用类表述现实世界事物的思想
# 2. 掌握类和对象的关系
# 3. 理解什么是面向对象
# 演示类和对象的关系,即面向对象的编程套路(思想)
# 设计一个闹钟类
class clock:
id = None
price = None
def ring(self):
import winsound
winsound.Beep(2000,3000)
# 构建2个闹钟对象并让其工作
clock1 = clock()
clock1.id = "003032"
clock1.price = 13.14
print(f"闹钟ID:{clock1.id},价格:{clock1.price}")
clock1.ring()
clock2 = clock()
clock2.id = "321341"
clock2.price = 52.0
print(f"闹钟ID:{clock2.id},价格:{clock2.price}")
clock2.ring()
第四节:构造方法
1.构造方法的名称是:
__init__,注意init前后的两个下划线符号
2.构造方法的作用:
(1)构建类对象的时候会自动运行
(2)构建类对象的传参会传递给构造方法,借此特性可以给成员变量赋值
3.注意事项:
(1)构造方法不要忘记self关键字
(2)在方法内使用成员变量需要使用self
# 构造方法 使用构造方法向成员变量赋值
# 构造方法的名称: __init__
class Student:
# 这三段代码可以省略
name = None
age = None
tel = None
def __init__(self,name,age,tel):
self.name = name
self.age = age
self.tel = tel
print("Student类创建了一个类对象")
stu = Student("周杰轮",31,"13143114")
print(stu.name)
print(stu.age)
print(stu.tel)
第五节 其它内置方法
总结:
# 其他内置方法
class Student:
def __init__(self,name,age):
self.name = name
self.age = age
# __str__魔术方法
def __str__(self):
return f"Student类对象,name:{self.name},age:{self.age}"
# __lt__魔术方法 用于小于和大于
def __lt__(self, other):
return self.age < other.age
# __le__魔术方法 用于大于等于和小于等于
def __le__(self, other):
return self.age <= other.age
# __eq__魔术方法 用于相等判断
def __eq__(self, other):
return self.age == other.age
stu = Student("周杰轮",31)
print(stu)
print(str(stu))
stu1 = Student("周杰轮",31)
stu2 = Student("郭绍锐",23)
print(stu1<stu2)
第六节 封装
1.封装的概念:将现实世界事物在类中描述为属性和方法。
2.什么是私有成员?为什么需要私有成员?
现实事物有部分属性和行为是不公开对使用者开放的 。同样在类中描述属性和方法的时候也需要达到这个要求,就需要定义私有成员了。
3.如何定义私有成员?
成员变量和成员方法的命名均以_作为开头。
4.私有成员的访问限制?
类对象无法访问私有成员,类中的其它成员可以访问私有成员。
# 封装
# 定义一个类,内含私有成员变量和私有成员方法 私有成员变量和方法前有倆 __
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()
# phone.__keep_single_core() 私有成员方法不可以直接使用
# print(phone.__current_voltage) 私有成员变量不可以直接使用
第六节 封装练习
class Phone:
# 提供私有成员变量
__is_5g_enable = False
# 提供私有成员方法
def __check_5g(self):
if self.__is_5g_enable == True:
print("5g开启")
else:
print("5g关闭,使用4g网络")
# 提供公开成员方法
def call_by_5g(self):
self.__check_5g()
print("正在通话中")
phone = Phone()
phone.call_by_5g()
第七节 继承
1.继承的概念:继承就是一个类,继承另外一个类的成员变量和成员方法。
语法:
class 类名(父类1,父类2,父类3):
类内容体
子类构建的类对象,可以
(1).有自己的成员变量和成员方法
(2).使用父类的成员变量和成员方法
2.单继承和多继承
单继承:一个类继承另一个类
多继承:一个类继承多个类,按照顺序从左向右依次继承
多继承中,如果父类有同名方法或属性,先继承的优先级高于后继承
3.pass关键字的作用是什么
pass的占位语句,用来保证函数(方法)或类定义的完整性,表示无内容,空的意思。
# 继承
# 单继承
class Phone:
IMEI = None # 序列号
producer = "HM" # 厂商
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 类名(父类1,父类2,父类3):
# pass
# 不需要加任何要求的话加个pass!!!!!
# 复写和使用父类成员
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("5g通话")
# 定义子类,复写父类成员 复写会直接替换掉
# class MyPhone(Phone): # 功能升级
# producer = "ITHEIMA"
# def call_by_5g(self):
# print("开启高级5g通话")
#
# phone = MyPhone()
# phone.call_by_5g()
# print(phone.producer)
# 在子类中,调用父类成员
class MyPhone(Phone): # 功能升级
producer = "ITHEIMA"
def call_by_5g(self):
print("开启高级5g通话")
# 方式1
print(f"父类的厂商是:{Phone.producer}")
Phone.call_by_5g(self)
# 方式2
print(f"父类的厂商是:{super().producer}")
super().call_by_5g()
phone = MyPhone()
phone.call_by_5g()
print(phone.producer)