mieki256's diary



2019/06/06(木) [n年前の日記]

#1 [python] Pythonで関数テーブルっぽいアレを書きたい

Pythonのスクリプト上で、関数テーブルっぽいものを書きたい。どうすればいいのやら。

ググってみて試してみたり。こうかな。

def func1():
    print("I am func1")


def func2():
    print("I am func2")


def func3():
    print("I am func3")


tbl = {
    0x01: func1,
    0x02: func2,
    0x03: func3,
}

for i in range(5):
    if i in tbl:
        tbl[i]()
    else:
        print("  %d is None" % i)

実行結果。
> python 01_def_call_test.py
  0 is None
I am func1
I am func2
I am func3
  4 is None

呼び出す際に、後ろに「()」をつければ関数として呼び出せる、のかもしれない。たぶん。

クラスの中で記述したい。 :

クラスの中で、定数として記述できるのか試したけれど、上手くいかない。 *1

結局、以下のように、初期化時に代入する感じに。

class DefCallTest(object):

    def __init__(self):
        self.tbl = {
            0x01: self.func1,
            0x02: self.func2,
            0x03: self.func3,
        }

    def func1(self):
        print("I am func1")

    def func2(self):
        print("I am func2")

    def func3(self):
        print("I am func3")

    def main(self):
        for i in range(5):
            if i in self.tbl:
                self.tbl[i]()
            else:
                print("  %d is None" % i)


c = DefCallTest()
c.main()

実行結果。
> python 02_def_call_test_with_class.py
  0 is None
I am func1
I am func2
I am func3
  4 is None

こういう書き方をするしかないのかな…。他に手はないものか。

2019/06/07追記。 :

クラス内でこの手のアレの書き方に関して、英語圏でもやり取りしてる例を見かけた。

_referencing class methods in class lists in Python - Stack Overflow

うーん。どれも、なにかこう…。

*1: そもそも Python に定数は無い、定数に見えるような書き方をしてるだけ、ではあろうけど。

以上です。

過去ログ表示

Prev - 2019/06 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project