2年ぶりにPythonマクロの更新をしようと思ったのですがもうすっかり忘れていてまた一からお勉強です。
Pythonのお勉強
Python 3.7.9 ドキュメント
Python 3.7のリファレンスページで日本語化されています。まずは9.2. Python のスコープと名前空間を読み直しました。スコープは言語によって異なるので毎回復習しないといけません。今回はモジュールに分割していたマクロを単一モジュールに統一するつもりなので、もともとのモジュールのスコープをどうやって単一モジュールに導入するのかを考えないといけませんでした。関数でスコープを区切ってしまうと関数内ではクラスを先頭にもってこないといけないので、コードが読みにくくなってしまいます。ということでクラスで区切ることになりそうです。で、次に考えたのは、そのクラスでクラス属性にコードを書いていくか__init__()で書いていくかです。クラス属性にするとクラスの属性が増えます、、、当たり前のことですけど。インスタンス化するときに引数を渡すときは__init__()で書く必要がありますが、そうでないときはどっちに書くが悩むところです。クラス属性だとクラスが読み込まれたときに実行されるので、その観点で使い分けることになりそうです。
Python Cookbook: Recipes for Mastering Python 3
第2版は日本語訳がでていますが、第3版とはPythonのバージョンが異なってだいぶ内容が違うので第3版を英語で読むしかありません。これを一通り読んでPython的な考え方が結構身についたと思います。
Google検索
Python ドキュメントやPython Cookbookでもやりかたがわからないときはまず英語の単語を並べて検索します。Stack Overflowでほしい答えが見つかることが多いです。Stack Overflowは誰でも書き込める掲示板ですが、それぞれの投稿に対して評価をつけることができ、間違っている投稿は評価がマイナスのことが多いのでどれが間違っているのか判断できます。正しい回答の当たりをつけたらあとはそのコードをもとに日本語ページを検索してもっと詳しく調べます。日本語だとQiitaにいい回答を多く見つけられますが、評価機能がなくて間違った内容でも区別がつかないので、注意が必要です。
linuxBean14.04(176)LibreOffice5.4.1のインストール-p--q
Windowsで稼働するスクリプトは原則このページの「LibreOffice5.4.1で利用可能なPythonモジュール一覧」にあるモジュールでやりくりしないといけません。
UbuntuでもPPAからではなく、download | LibreOffice - オフィススイートのルネサンスからインストールしたときはWindowsの場合と同じようにモジュールの一部しか使えません。
PyUNO( Python-UNO bridge )のお勉強
PyUNOについてはLibreOffice(5)PythonでLibreOfficeが動く仕組み:UNO-p--qで学習しました。簡単に言うとLibreOfficeをPythonで動かすための仕組みです。
IDLの型の扱い方の例が載っています。
hanya氏のOpenOffice.orgについての解説ですが、LibreOfficeでも十分に参考になります。
「中の人」の記事なので基本がわかりますので、まずは読むべきサイトです。
Apache OpenOffice Developer's Guide - Apache OpenOffice Wiki
これもApache OpenOfficeのものですが、LibreOfficeでも同じなので、基礎の学習にはよい参考資料です。
LibreOfficeのAPIリファレンス。型の確認などのために頻繁に見ることになります。
LibreOffice5(94)サービスとインターフェース一覧が載っているページの一覧-p--q
UNOオブジェクトについてサービスとインターフェイスを調べて、プロパティとアトリビュートとメソッドについてそれぞれAPIリファレンスへのリンクをつけています。ページの下の方に「おまけ」も載せています。
プログラミングのお勉強
C言語による計算の理論 (Computer Science Library) (日本語) 単行本
関数でどういう場合に再帰を使うべきか理屈が知りたくて購入したものです。
コンピュータの本を2冊購入-p--qとPython(14)アッカーマン関数のお勉強-p--qで勉強したことを書きましたが、いまこれらの記事を読んでもよくわかりませんね、、、
とりあえずこれを読んでいまも理解したことは次の3つのことです。
while文を使えばすべてのプログラムを書くことはできるが計算終了するとは限らない。
for文はループの回数がループが始まる前に決定できるときにしか書けない。その代わり必ず計算終了する。
再帰はwhile文で書き換えができる。したがって再帰も計算終了するとは限らない。
これらのことを踏まえてループの回数が事前にわかっているものはfor文を使うようにしています。再帰を使うとスマートなコードに見えるので使いこなしたいのですがまだ使いこなせていません。再帰とwhile文は同値ということですが、実際は再帰にはインタープリターで上限が決まっています(Python(10)再帰のお勉強:自然数の階乗-p--qの「再帰の深さの限界を調べる」)。
Head Firstデザインパターン ―頭とからだで覚えるデザインパターンの基本 (日本語)
Javaの本ですが、LibreOfficeのAPIがオブジェクト指向なので、それについて勉強したくて購入しました。linuxBean14.04(168)NetBeans8.0.2でJavaソースコードからUML図を出力する-p--qやlinuxBean14.04(172)Observerパターン:Subjectを実装しない方法-p--qでいろいろやってみました。
イベント駆動のマクロではObserverパターンを使って自分でリスナーを実装しないといけないので、このパターンはしっかり理解しておく必要があります。でも他のパターンはPythonやLibreOffice APIですでに実装されて無意識に利用しているので改めて学習する必要はない感じです。
オブジェクト指向
関数を使うかクラスを使うかモジュールを使うか迷うときの参考にオブジェクト指向のお勉強をしようと思ったのですが、適当なものがみつけられていません。たぶんどれを使っても使えるのならいいということだと思います。私は必要性がなければクラスは使わず関数を使うのが好みです。
リスナーはLibreOffice APIのインターフェイスを継承したPythonクラスを実装してサブジェクトに渡すのでクラスを必ず使わないといけません。拡張機能でサービスを実装するときもインターフェイスのメソッドを実装したクラスを使わないといけません。
それ以外のときは継承を使うときはクラスにして、それ以外は関数とかモジュールで名前空間を区切ることが多いです。
そもそもオブジェクト指向とはなにかを学習していてた頃は、クラスとか継承とかカプセル化とかポリモーフィズムとか、解説を読んでみましたがそれとオブジェクト指向との関係がよくわかりませんでした。いま振り返ってみるとこれらの用語は「オブジェクト」の解説であって、「オブジェクト指向」の解説にはなっていないと思います。いま単純にオブジェクト志向を使っているな、と思うのは、オブジェクトを引数に渡しているときです。
0 件のコメント:
コメントを投稿