noteのタイトル画像

[Puppeteer] かなり恥ずかしい話

こんばんは。
最近、資格試験の勉強を始めていて、ちょっとプログラミングの時間が取れていない「おさむ」です。

さて、今回はちょっと恥ずかしい話をしなくてはなりません。

今、python製仮想通貨自動取引bot開発フレームワーク「Puppeteer」を共同開発して頂ける方に参加頂いて、Puppeteerをブラッシュアップしています。

その過程において

私は大馬鹿野郎

ってことがわかってしまいました (;_;)

Puppeteerはpython製仮想通貨自動取引bot開発フレームワークです。
MITライセンスにてGitHubを中心に公開しています。

このフレームワークは、売買ロジックをPuppet(傀儡/人形)として作成し、PuppetをPuppeteer(傀儡師/人形使い)から呼び出すという構造です。

各人がロジックを実装するのは「Puppet」と呼ばれるクラスであり、
Puppetを以下のようなクラスとして定義していました。

# ==========================================
# Puppet(傀儡) クラス
#   param:
#       puppeteer: Puppeteerオブジェクト
# ==========================================
class Puppet(Puppeteer):

生粋(?)のPython使いの方ならばすぐにお気づきでしょうが、この書き方だとPuppetがPuppeteerを継承する書き方なんですね。

なんと、、私はこの書き方がクラスへの引数になるのだと思っていて、継承などするつもりもなく実装していました。
(色々なプログラミング言語を渡り歩いてきて、その延長線上で書いてしまってました)

のちに、色々な文献でpythonの継承について調べて実装もしているので、プログラミング後半は継承について理解していたつもりなのですが、Puppetのクラス定義を見直すことをしていなかったので、そのまま残ったままになっていました。orz

しかし上記の実装でも問題なく動いてしまいます。
そのあたりは「Python、、、ある意味すげーーーー」な訳なんですが。
Puppeteerをブラッシュアップしている過程で、PEP8というコーディング規約を適用したときに、継承元のクラスの__init__を呼び出して異常が発生したことで「初めて気が付きました」

正しくは

# ==========================================
# Puppet(傀儡) クラス
# ==========================================
class Puppet:

なんですね。
クラスのコンストラクタは

   # ==========================================================
   # 初期化
   #   param:
   #       puppeteer: Puppeteerオブジェクト
   # ==========================================================
   def __init__(self, Puppeteer):
       self._exchange = Puppeteer._exchange  # 取引所オブジェクト(ccxt.bitmex)
       self._logger = Puppeteer._logger  # logger
       self._config = Puppeteer._config  # 定義ファイル

のように書けばよかっただけのこと。

「にわかPython使い」であることがバレバレですが、
今後共よろしくお願い致します。

楽しいbotライフを!





ソフトウェア・エンジニアを40年以上やってます。 「Botを作りたいけど敷居が高い」と思われている方にも「わかる」「できる」を感じてもらえるように頑張ります。 よろしくお願い致します。