上节课回顾:
os模块—》目录 路径 管理
time模块—》时间戳 时间元组 转化字符串(str_)
相互之间转换函数
异常处理:
1、常见异常如何处理
2、捕获异常——》提高代码的健壮性(容错性)
try:
代码块
except:
捕获到异常会执行代码块

面向对象概念

Python是一门面向对象编程的语言
封装:提高代码复用性,便于维护 —-》 函数 类
面向对象编程,最常见的表现就是基于类来表现

一、什么是类(class)

人类:中国人 美国人 日本人 集合(一群对象)
动物类:
…类
类:类用来描述具有相同属性和方法对象的集合
类抽取一群对象中的相同属性+相同行为
类=属性+行为
属性:特征(姓名 头 ….)
方法:行为(吃 睡 说话….)

二、什么是对象

世间万物都可以为对象,对象是类的实例

三、类的定义

类:类用来描述具有相同属性和方法对象的集合

四、构造方法

类有一个名为 init() 的特殊方法(构造方法),该方法在类实例化时会自动调用。

五、类的属性

1、类属性

类属性:相当于全局变量,实例对象共有的属性

2、实例属性

实例对象自己私有

3、内置属性

类名.dict : 类的属性(包含一个字典,由类的数据属性组成)
类名.doc :类的文档字符串
类名.name:类名
类名.module:类定义所在的模块(类的全名是’main.className’,如果类位于一个导入模块mymod中,那么className.module 等于 mymod)
类名.bases :类的所有父类构成元素(包含了一个由所有父类组成的元组)

  1. class people:
  2. """描述一个中国人类"""
  3. fuse="yellow" # 类属性1
  4. language = "chain" # 类属性2
  5. # 构造方法‐‐‐》名字特殊 __init__ 调用特殊:实例化时调用
  6. # 什么时候会重构构造方法‐‐‐》初始化数据
  7. def __init__(self,name,classname):
  8. print(f"实例化了一个对象,她的名称{name},班级{classname}")
  9. self.name=name #实例属性:实例对象自己私有。‐‐‐》self.name self.classname
  10. self.classname=classname
  11. # 定义行为? 说话 睡觉
  12. def speak(self):
  13. print(self,type(self))
  14. print("我说就是中国话")
  15. # DD 类的实例化‐‐‐》对象
  16. # 初始化数据 名称:DD 班级:211
  17. DD=people("DD","211")
  18. DD.speak()
  19. print("获取DD同学的特征",DD.language,DD.fuse)
  20. # hefan 对象
  21. hefan=people("hefan","210")
  22. # 初始化数据 名称:hefan 班级:210
  23. hefan.speak()
  24. print("获取hefan同学的特征",hefan.language,hefan.fuse)
  25. # 类属性: fuse="yellow" #类属性1
  26. # language = "chain" # 类属性2
  27. print("类属性可以通过对象或类来获取:",people.fuse,DD.fuse)
  28. print("类属性可以通过对象或类来获取:",people.language,hefan.fuse)
  29. # 实例属性
  30. print("实例属性只能通过对象来调用:",hefan.name)
  31. # print("实例属性不同通过类去获取:",people.name)
  32. # 内置属性 底层每个类都有的这些数据,不同的内置属性存储不同的数据
  33. print(people.__doc__)
  34. print(people.__name__)
  35. print(people.__module__)

六、方法

1、实例方法

使用 def 关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数 self,且为第一个参数,self 代表的是类的实例。实例方法只能被实例对象调用

2、静态方法

由@staticmethod装饰的方法,没有self这个参数,而将这个方法当成一个普通的函数使用。可以被类或类的实例对象调用

3、内置方法

指定的方法名,去执行特定业务
方法名有规则:方法名前后有双下划线
比如:init

4、私有方法

  1. class people:
  2. """描述一个中国人类"""
  3. fuse="yellow" #类属性1
  4. language = "chain" # 类属性2
  5. # 构造方法‐‐‐》名字特殊 __init__ 调用特殊:实例化时调用
  6. # 什么时候会重构构造方法‐‐‐》初始化数据
  7. def __init__(self,name,classname):
  8. print(f"实例化了一个对象,她的名称{name},班级{classname}")
  9. self.name=name #实例属性:实例对象自己私有。‐‐‐》self.name self.classname
  10. self.classname=classname
  11. #静态方法‐‐‐》公共方法:类和对象公用
  12. @staticmethod
  13. def static_method():
  14. print("这是一个静态方法")
  15. # 类方法‐‐‐‐》公共方法:类和对象公用
  16. @classmethod
  17. def class_method(cls):
  18. print(cls,type(cls))
  19. print("这是一个类方法")
  20. # 定义行为? 说话 睡觉 ‐‐‐‐》实例方法
  21. def speak(self):
  22. print(self,type(self))
  23. print("我说就是中国话")
  24. def __str__(self):
  25. return "欢迎来到码尚学院VIP‐211期"
  26. def __getattribute__(self, item):
  27. if item=="name":
  28. return "名称"
  29. # def __del__(self):
  30. # print("调用del方法,释放对象的内存地址")
  31. # people.static_method()
  32. DD=people("DD","211")
  33. print(DD.name)
  34. # # DD.static_method()
  35. # people.class_method()
  36. # DD.class_method()

七、私有属性及私有方法

1、私有属性

必须以双下划线开头,只能类内部进行访问

2、私有方法

必须以双下划线开头,只能类内部进行调用

作业

作业答案_面向对象1.txt

  1. # 一、定义名为MyTime的类,其中应有三个实例变量 时hour 分minute 秒second
  2. # 1)为了给对象初始化赋值,编写构造方法,对时分秒附初始值
  3. # 2)为了保证数据的安全性,这三个成员变量应声明为私有、
  4. # 3)对三个属性分别定义封装get和set方法,定义一个main方法,创建一个MyTime类的对象并调用这六个方法。
  5. class MyTime():
  6. def __init__(self, hour, minute, second):
  7. self.__hour = hour
  8. self.__minute = minute
  9. self.__second = second
  10. def set_h(self, h):
  11. self.__hour = h
  12. def get_h(self):
  13. return self.__hour
  14. def set_m(self, m):
  15. self.__minute = m
  16. def get_m(self):
  17. return self.__minute
  18. def set_s(self, s):
  19. self.__second = s
  20. def get_s(self):
  21. return self.__second
  22. def __str__(self):
  23. return f"当前时间为:{self.__hour}:{self.__minute}:{self.__second}"
  24. if __name__ == "__main__":
  25. my_time = MyTime(14, 28, 56)
  26. print(my_time._MyTime__hour, my_time._MyTime__minute, my_time._MyTime__second)
  27. my_time.set_h(15)
  28. print(my_time.get_h())
  29. my_time.set_m(29)
  30. print(my_time.get_m())
  31. my_time.set_s(57)
  32. print(my_time.get_s())
  33. print(my_time)
  1. # 二、为"无名的粉"写一个类WuMingFen,有三个属性 面码:String theMa 粉的分量(两) int quantity 是否带汤 boolean likeSoup
  2. # 要求:
  3. # 1)写一个构造方法 分别给三个属性赋值。构造出一个WuMingFen类的对象(酸辣面码、2两、带汤),
  4. # 2)写一个普通方法check()打印对象的三个属性。通过对象调用此方法。
  5. class WuMingFen():
  6. def __init__(self, theMa, quantity, likeSoup):
  7. self.theMa = theMa
  8. self.quantity = quantity
  9. self.likeSoup = likeSoup
  10. def check(self):
  11. print(self.theMa, self.quantity, self.likeSoup)
  12. if __name__ == "__main__":
  13. wmf = WuMingFen("酸辣面码", "2两", "带汤")
  14. wmf.check()