多继承、模块和包

. 多继承

  1.  为什么使用多继承? 为了隔离多个维度的变化
     2.  同名方法解析顺序? 继承列表从左向右(广度优先)
class A:
    def func01(self):
        print("A -- func01")


class B(A):
    def func01(self):
        print("B -- func01")
        # 创建D对象,执行C
        # 创建B对象,执行A
        super().func01()


class C(A):
    def func01(self):
        print("C -- func01")
        super().func01()


class D(B, C):
    def func01(self):
        print("D -- func01")
        super().func01()


d = D()  # D --> B --> C --> A
d.func01()
# 通过类型的mro方法,查看同名方法解析顺序
print(D.mro())

. 模块:

导入方式1:语法:import 模块名

使用:模块名. 成员

本质:创建变量名,关联该模块地址

import module01
module01.func01()

导入方式2:语法:from 模块 import 内容

使用:直接使用内容

本质:将该模块成员导入到当前作用域

def func01():
    print("demo02 - func01")

from module01 import func01
func01()

func01()

from module01 import *

func02()

. 包:

根目录

​ 包(文件夹+init.py)

​ 模块(文件)

​ 类

​ 函数

​ 语句

# 路径:从根目录开始写(不写根目录)

# 方式一:我过去
import package01.package02.module02 as m2

m2.func01()

# 方式二:你过来
from package01.package02.module02 import func01

func01()

只导入包,不导入包的模块,必须配置__init__.py

# 方式1
import package01.package02 as p2

p2.module02.func01()

# 方式2
# from package01 import package02
#
# package02.module02.func01()

from package01.package02 import *

module02.func01()


if __name__ == "__main__":
     print("老子(demo04)是主模块!!!!")

. 总结:

  1. 为什么要有模块和包?将代码有逻辑的组织在一起,使得结构更加清晰

  2. (主流)导入方式

    方式1:我过去

    ​ import 模块名

    ​ 模块名. 成员

    ​ import 路径. 模块名 as 别名

    ​ 别名. 成员

    方式2:你过来
            from 模块 import 成员
            直接使用成员
    
            from 路径.模块 import 成员
            直接使用成员
    
            from xxx import *
            直接使用所有成员
    
        路径:从项目根目录开始(不包含根目录)
    3. (非主流)导入方式:导入包,不导入模块
            必须配置包的__init__.py模块
            import 包
            from 包 import 包
    4.搜索模块顺序:按照系统路径搜索,如果有满足条件,立即停止.
        import sys
        print( sys.path)
        系统路径是一个列表
        第一个元素是根目录(主模块(第一次运行的模块)所在的文件夹)
        导入模块是否成功的唯一标准:
            导入路径 + 系统路径 = 真实路径
    
 模块变量
# 1. 变量__doc__存储的是:模块的文档注释
# print(__doc__)

# print(random.__doc__)

# 2. 变量__name__存储的是:当前模块名称
import demo04

# 如果当前是主模块
if __name__ == "__main__":
     print("老子(demo05)是主模块!!!!")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值