Help us understand the problem. What is going on with this article?

もっとライブラリを!import を使う

More than 1 year has passed since last update.

Python には import という便利な機能がある。これを使えばファイルを分割して管理できる。ちょっとしたライブラリが書けるというわけだ。

まずは簡単なところで定数をライブラリ化しよう。

asicc_const.py
SOH = 0x01
STX = 0x02
EOT = 0x04
ACK = 0x06
DLE = 0x10
NAK = 0x15
CAN = 0x18

これは、次の記事で使う予定の xmodem が使うアスキーコード。必要なところだけを書いている。(おって、全部に対応する予定)

使う側は python と同じ方法で import 出来る。

from ascii_const import EOT, ACK, NAK, CAN

class や関数も同様に import 出来る。次の記述は x_mem という class と定数を import した例である。

from xmodem_mem import x_mem, CMD_NOP, CMD_WRITE, CMD_READ, BLOCK_SIZE

@module
class xmodem_m2q:
    def __init__(self):
        self.xmodem_in_q  = Queue(bit8, 'in',  maxsize=128)
        self.xmodem_out_q = Queue(bit8, 'out',  maxsize=128)
        self.mem = x_mem()

        self.idouk  = Queue(bit8, 'out')
        self.append_worker(self.worker)

...
後略
...

これはかなり強力だ。class から動的にオブジェクトを生成するとることは出来ないが、init からであれば、それは静的に配置される。x_mem のコンストラクタを見てみよう。

@module
class x_mem:
    def __init__(self, max_block_n = 8):
        self.max_block_n = max_block_n

        self.bin_in_q = Queue(bit8, 'in', maxsize=128)
        self.bin_out_q = Queue(bit8, 'out', maxsize=128)

        self.cmd = Queue(bit2, 'in')
        self.cmd_busy = Port(bit, 'out', init=0)
        self.append_worker(self.worker)
...
後略
...

こちらでは Queue として bin_in_q や bin_out_q、cmd が生成されている。これらは外部と通信する口なので、外からアクセス可能である。つまり、自分のモジュールに x_mem を取り入れて、この Queue を使って通信することが可能なのだ。

この方式を使うとライブラリを使いまわすことが出来、一気に汎用性が増す。将来的に Polyphony が取り入れるであろう関数オブジェクトの機能が加わると、より汎用性は増す。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away