类属性(可以理解为类中共享的全局变量)
实例属性
- 所属于具体的实例对象,不同实例对象之间的实例属性互不影响
类属性
- 所属于类对象,多个实例对象之间共享同一个类属性
- 获取类属性方法:类名.类属性
- 通过实例对象不能够修改类属性
实例1:
1 | class Person: |
结果:
1 | 1 1 |
实例2:
1 | class Person: |
结果:
1 | 100 0 0 |
实例3:
1 | class Person: |
结果:
1 | 10 1 |
类方法、静态方法
类方法—操作类属性
- 所属于类对象,使用@classmethod修饰的方法
- 定义类方法的第一个参数通常以”cls”参数作为类对象被传入
- 调用方式:类名.类方法 或者 实例对象.类方法(不推荐)
实例3:
1 | class Person: |
结果:
1 | 1 |
静态方法—-和类和对象没有太大关系
- 使用@staticmethod修饰的方法,不需要默认传递任何参数
- 调用方式:类名.静态方法 或者实例对象.静态方法
实例4:
1 | class Person: |
结果:
1 | ----静态方法---- |
单例类
new(cls)
- 超类object类内置的方法,用户创建对象,返回创建对象的引用
- 必须要提供cls参数,代表类对象
- 必须要有返回值,返回创建对象的引用
实例5:
1 | """ |
结果:
1 | 1706654249752 |
单例类
- 在整个程序系统中确保某一个类只有一个实例对象
实例6:
1 | #单例类 |
结果:
1 | -------init------- |
异常处理
链接:异常处理
捕获异常
1 | try: |
实例7:
1 | try: |
结果:
1 | 捕获到了异常!文件不存在 [Errno 2] No such file or directory: 'test.txt' |
捕获多个异常
1 | try: |
实例8:
1 | try: |
结果:
1 | 捕获到了异常! name 'num' is not defined |
捕获所有可能发生的异常
1 | try: |
实例9:
1 | try: |
结果:
1 | 捕获所有可能的异常 [Errno 2] No such file or directory: 'test.txt' |
finally
1 | try: |
实例10:
1 | f = None |
结果:
1 | 捕获到了异常 [Errno 2] No such file or directory: 'test.txt' |
函数嵌套异常传递
实例11:
1 | def test1(): #通过打印的方式也可以查询问的所在处 |
结果:
1 | ------test2-1-------- |
包和模块(包可以类比成文件夹)
链接:模块和包
模块的名字: .py文件的名字
下面是关于pycharm,能够引用包的设置步骤:若设置成功,则文件夹中间是实心,而非空心。
下图是包的形式,以.py的文件名字,包分别是bussiness和tool:
包下可以包含子包
不同包下可以有相同的模块名称,使用‘包名.模块名’的方式区分
实例12:
1 | import bussiness.model1,tool.model1 |
引入模块的方式
- 引入单个模块:import module_name
- 引入多个模块:import module_name1,module_name2,···
- 引入模块中的指定函数:from module_name import func1,func2,···
实例13:
1 | from bussiness import * #批量导入 |
包中必须包含一个默认的init文件
- 用于标识一个包,而不是普通的文件夹
- 会在包或者该包下的模块被引入时自动调用
- 常用于设置包和模块的一些初始化操作
实例14:
1 | #init可以对包进行初始化的设置 |