Python多文件工程结构与自定义模块

同级目录下的文件引用

这里凡哥以面向过程的思维,创建了一个hello.py里面存放了凡哥定义的一个HelloWorld的函数 下面的演示样例,给大家演示了如何调用同级目录下其他.py文件的函数。

文件结构

├── hello.py
└── main.py

hello.pymain.py中处于同一个目录下,其中main.py需要调用hello.py

我们在hello.py中声明了一个函数

hello.py

def HelloWorld():
    print("HelloWorld")

我们在main.py中引用这个函数的有很多方式

方式1

main.py

import hello

hello.HelloWorld()

方式2

# 导入hello中的所有函数
from hello import *

HelloWorld()

方式3

from hello import HelloWorld

HelloWorld()

自定义库文件夹的文件引用

这里面我们以流水灯为例,创建了两个对象 闪烁LED对象CrLED与 流水灯对象CrLEDList 分别存放在crlib的两个.py文件里。

工程文件结构

.
├── crlib
│   ├── __init__.py
│   ├── crled.py
│   └── crledlist.py
└── main.py

main.py 为主程序。 crlib/crled.py 里面定义了一个控制小灯闪烁的类CrLEDcrlib/crledlist.py 里面定义了一个跑马灯的类 CrLEDList

调用依赖关系如下 main.py 依赖 crlib/crledlist.py crlib/crledlist.py依赖crlib/crled.py

如果我们想实现层级引用的这种效果,例如在main.py

from crlib.crledlist import CrLEDList

我们必须在crlib这个文件下添加一个空文件__init__.py 这样python就吧crlib当作了一个包package 就可以进行crlib.xxxx的引用。

同时注意,crlib/crledlist.py依赖crlib/crled.py 因为同属于crlib这个包, crledlist.py中引入同级文件crled.py的时候需要这样写

# 注意这里crled与crledlist同级,crledlist需要引用crled
# 他们同属于crlib这个包,引用的时候要写crlib.crled, 而不是crled
from crlib.crled import CrLED

文件源码如下

面向对象的流水灯-源代码下载链接


main.py 主程序里面创建一个流水灯对象, 执行流水灯的函数。

from crlib.crledlist import CrLEDList

ledList = CrLEDList([1, 2, 3, 4])

while True:
    ledList.blinkInOrder()

crlib/__init__.py

这个文件为空文件, 啥都没有, 但是不可缺失, 否则crlib就不能作为一个package被引用

crlib/crled.py

控制单个LED闪亮的对象

import time
from pyb import LED

class CrLED:

    def __init__(self, ledIdx):
        self.led = LED(ledIdx)

    def blink(self):
        self.led.on()
        time.sleep(1000)
        self.led.off()
        time.sleep(1000)

crlib/crled.py

# 注意这里crled与crledlist同级,crledlist需要引用crled
# 他们同属于crlib这个包,引用的时候要写crlib.crled, 而不是crled
from crlib.crled import CrLED

class CrLEDList:

    def __init__(self, idxList):
        # 构造函数
        # 初始化一个空数组
        self.ledList = []
        # 将每个crled逐个添加到数组中
        for idx in idxList:
            self.ledList.append(CrLED(idx))

    def blinkInOrder(self):
        # 按照顺序点亮
        print("Blink In Order")
        for led in self.ledList:
            led.blink()
Copyright 杭州云江科技有限公司 2017 all right reserved,powered by Gitbook该文件修订时间: 2018-04-02 09:53:14

results matching ""

    No results matching ""