Python面向对象

C语言是面向过程的语言 Python是面向对象的语言。

关于Python面向对象的教程,凡哥还在酝酿中。 凡哥以流水灯为例,写好了一个面向对象的工程。

python多文件工程结构,大家可以参考下一集 python多文件工程结构


这里面我们以流水灯为例,创建了两个对象 闪烁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 主程序里面创建一个流水灯对象, 执行流水灯的函数。

# 从crlib/crledlist.py 引入CrLEDList这个类
from crlib.crledlist import CrLEDList

# 创建一个CrLEDList类的对象
ledList = CrLEDList([1, 2, 3, 4])

while True:
    # 调用ledList的blinkInOrder方法,依次点亮LED
    ledList.blinkInOrder()

crlib/__init__.py

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

crlib/crled.py

控制单个LED闪亮的对象

import time
from pyb import LED

class CrLED:
    # CrLED的构造其方法
    # 这里的self类似JAVA中的this
    # 需要传入的参数是 ledIdx, led的编号
    def __init__(self, ledIdx):
        # self.led是CrLED的一个属性
        # 它的类型是pyb.LED
        self.led = LED(ledIdx)

    # CrLED类的一个函数
    def blink(self):
        # 这里使用的是self.led
        # 这个对象的led属性
        # 打开这个LED
        self.led.on()
        # 睡眠1000ms = 1s
        time.sleep(1000)
        # 关闭LED
        self.led.off()
        # 睡眠1000ms = 1s
        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都是CrLED的实例
            # 调用led对象的blink()函数
            led.blink()
Copyright 杭州云江科技有限公司 2017 all right reserved,powered by Gitbook该文件修订时间: 2018-04-02 09:53:14

results matching ""

    No results matching ""