上节课回顾:
os模块—》目录 路径 管理
time模块—》时间戳 时间元组 转化字符串(str_)
相互之间转换函数
异常处理:
1、常见异常如何处理
2、捕获异常——》提高代码的健壮性(容错性)
try:
代码块
except:
捕获到异常会执行代码块
面向对象概念
Python是一门面向对象编程的语言
封装:提高代码复用性,便于维护 —-》 函数 类
面向对象编程,最常见的表现就是基于类来表现
一、什么是类(class)
人类:中国人 美国人 日本人 集合(一群对象)
动物类:
…类
类:类用来描述具有相同属性和方法对象的集合
类抽取一群对象中的相同属性+相同行为
类=属性+行为
属性:特征(姓名 头 ….)
方法:行为(吃 睡 说话….)
二、什么是对象
三、类的定义
四、构造方法
类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用。
五、类的属性
1、类属性
2、实例属性
3、内置属性
类名.dict : 类的属性(包含一个字典,由类的数据属性组成)
类名.doc :类的文档字符串
类名.name:类名
类名.module:类定义所在的模块(类的全名是’main.className’,如果类位于一个导入模块mymod中,那么className.module 等于 mymod)
类名.bases :类的所有父类构成元素(包含了一个由所有父类组成的元组)
class people:"""描述一个中国人类"""fuse="yellow" # 类属性1language = "chain" # 类属性2# 构造方法‐‐‐》名字特殊 __init__ 调用特殊:实例化时调用# 什么时候会重构构造方法‐‐‐》初始化数据def __init__(self,name,classname):print(f"实例化了一个对象,她的名称{name},班级{classname}")self.name=name #实例属性:实例对象自己私有。‐‐‐》self.name self.classnameself.classname=classname# 定义行为? 说话 睡觉def speak(self):print(self,type(self))print("我说就是中国话")# DD 类的实例化‐‐‐》对象# 初始化数据 名称:DD 班级:211DD=people("DD","211")DD.speak()print("获取DD同学的特征",DD.language,DD.fuse)# hefan 对象hefan=people("hefan","210")# 初始化数据 名称:hefan 班级:210hefan.speak()print("获取hefan同学的特征",hefan.language,hefan.fuse)# 类属性: fuse="yellow" #类属性1# language = "chain" # 类属性2print("类属性可以通过对象或类来获取:",people.fuse,DD.fuse)print("类属性可以通过对象或类来获取:",people.language,hefan.fuse)# 实例属性print("实例属性只能通过对象来调用:",hefan.name)# print("实例属性不同通过类去获取:",people.name)# 内置属性 底层每个类都有的这些数据,不同的内置属性存储不同的数据print(people.__doc__)print(people.__name__)print(people.__module__)
六、方法
1、实例方法
使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。实例方法只能被实例对象调用
2、静态方法
由@staticmethod装饰的方法,没有self这个参数,而将这个方法当成一个普通的函数使用。可以被类或类的实例对象调用
3、内置方法
指定的方法名,去执行特定业务
方法名有规则:方法名前后有双下划线
比如:init
4、私有方法
class people:"""描述一个中国人类"""fuse="yellow" #类属性1language = "chain" # 类属性2# 构造方法‐‐‐》名字特殊 __init__ 调用特殊:实例化时调用# 什么时候会重构构造方法‐‐‐》初始化数据def __init__(self,name,classname):print(f"实例化了一个对象,她的名称{name},班级{classname}")self.name=name #实例属性:实例对象自己私有。‐‐‐》self.name self.classnameself.classname=classname#静态方法‐‐‐》公共方法:类和对象公用@staticmethoddef static_method():print("这是一个静态方法")# 类方法‐‐‐‐》公共方法:类和对象公用@classmethoddef class_method(cls):print(cls,type(cls))print("这是一个类方法")# 定义行为? 说话 睡觉 ‐‐‐‐》实例方法def speak(self):print(self,type(self))print("我说就是中国话")def __str__(self):return "欢迎来到码尚学院VIP‐211期"def __getattribute__(self, item):if item=="name":return "名称"# def __del__(self):# print("调用del方法,释放对象的内存地址")# people.static_method()DD=people("DD","211")print(DD.name)# # DD.static_method()# people.class_method()# DD.class_method()
七、私有属性及私有方法
1、私有属性
2、私有方法
作业
# 一、定义名为MyTime的类,其中应有三个实例变量 时hour 分minute 秒second# 1)为了给对象初始化赋值,编写构造方法,对时分秒附初始值# 2)为了保证数据的安全性,这三个成员变量应声明为私有、# 3)对三个属性分别定义封装get和set方法,定义一个main方法,创建一个MyTime类的对象并调用这六个方法。class MyTime():def __init__(self, hour, minute, second):self.__hour = hourself.__minute = minuteself.__second = seconddef set_h(self, h):self.__hour = hdef get_h(self):return self.__hourdef set_m(self, m):self.__minute = mdef get_m(self):return self.__minutedef set_s(self, s):self.__second = sdef get_s(self):return self.__seconddef __str__(self):return f"当前时间为:{self.__hour}:{self.__minute}:{self.__second}"if __name__ == "__main__":my_time = MyTime(14, 28, 56)print(my_time._MyTime__hour, my_time._MyTime__minute, my_time._MyTime__second)my_time.set_h(15)print(my_time.get_h())my_time.set_m(29)print(my_time.get_m())my_time.set_s(57)print(my_time.get_s())print(my_time)
# 二、为"无名的粉"写一个类WuMingFen,有三个属性 面码:String theMa 粉的分量(两) int quantity 是否带汤 boolean likeSoup# 要求:# 1)写一个构造方法 分别给三个属性赋值。构造出一个WuMingFen类的对象(酸辣面码、2两、带汤),# 2)写一个普通方法check()打印对象的三个属性。通过对象调用此方法。class WuMingFen():def __init__(self, theMa, quantity, likeSoup):self.theMa = theMaself.quantity = quantityself.likeSoup = likeSoupdef check(self):print(self.theMa, self.quantity, self.likeSoup)if __name__ == "__main__":wmf = WuMingFen("酸辣面码", "2两", "带汤")wmf.check()
