Pythonの開発環境などについて色々
最近卒研でPythonを触っています。
備忘録代わりに色々まとめようかなと思います。
開発環境
基本的にatomにvimのプラグインを入れて開発しています。
ただ既存のatomのpythonコードのハイライトが、アノテーションに対応していなかったので、MagicPythonのプラグインを入れて居ます。
これもあんまり好きじゃないのですが、とりあえずこれを使って居ます。
以下の環境を基本的に参考にしました。
おかゆのAtomのパッケージのメモ - ゆくゆくは有へと
Pythonの小ネタまとめ
筆者はもともとC++を触って居たのですが、
pythonコードを書いてて「これはPythonだとどうやるんだろう」と気になったことをまとめようと思います。
抽象クラス関連
親クラスにgetterだけ実装して、子クラスにはsetterみたいなのだけ実装したい場合、
親クラスと子クラス両方で使う変数には「__(アンダーバー2つ)」付けずに実装しなければならないようです。
これでは、子クラス内の変数が隠蔽されません。
これを解消したく色々試した結果、以下のようなコードになりました。
from abc import ABCMeta, abstractmethod # 抽象クラス class Animal(metaclass=ABCMeta): @classmethod @abstractmethod def __init__(self): self.__voice = "" pass def get_voice(self) -> str: return self.__voice @classmethod @abstractmethod def set_voice(self, voice: str): self.__voice = str pass # 抽象クラスを継承 class Dog(Animal): def __init__(self): self.set_voice("woof") def set_voice(self, voice: str): #super().voice = voice self._Animal__voice = voice if __name__ == "__main__": print(issubclass(Dog().__class__, Animal)) #true print(isinstance(Dog(), Animal)) #true dog = Dog() print(dog.get_voice()) #woof #print(dog.voice) # error
set_voice関数で無理やり親クラスの内部変数にアクセスしています。
推奨されない感がすごいですね。。。これ以外の実装方法が思い浮かびませんでした。
良い案求めてます笑
以下のサイトを参考にしました。
PythonのABC - 抽象クラスとダック・タイピング - Qiita
これちょっとQiitaにでも上げて、意見を求めてみようかしら
Pythonの親クラスにgetter、子クラスにsetterを実装する。 - Qiita
[加筆]qiitaに書いてみたところ、そもそもアンダーバー2つをそこまで使わなくても良いらしい
たしかにそんな気がする
紳士協定的にアンダーバー付いてるのにアクセスする方が悪いのスタイルで、アンダーバー1つを変数につけるのが正解っぽい。
コーディング規約
結構適当な人間なので、また読み返す
pythonのコード書いてると、スネークケースだらけになるのは私だけでしょうか。
pep8に準拠する - Qiita
Pythonのコーディング規約PEP8を要約してみる(1) - Qiita
可変長引数
*だとタプルになって、**だと辞書オブジェクトに格納されるようです。
qiita.com
XMLファイルの操作
デコレータ関連
デバッグが楽になりそう
自分はgetterじゃなくて@propertyでクラス変数を取得するのがあんまり好きくないので、@propartyはあんまり使ってないです。
リストオブジェクトとかをgetterで返すときはちゃんとdeepcopyしないとバグの温床になりやすいので注意してます
Python デコレータ再入門 ~デコレータは種類別に覚えよう~ - Qiita
matplotlib
基本的に下のサイトを見て、詳しく知りたくなったら、関数名でググります。
最初から公式サイト見た方が速いことも。
matplotlib - Python学習講座
リアルタイムな描画
matplotlibでリアルタイム描画 - Qiita
matplotlibによるリアルタイムのグラフ表示 - Qiita
その他参考サイト
Pythonを書き始める前に見るべきTips - Qiita
終わりに
とりあえずこんな感じで。
pep8関連は結構放置しているので手をつけねば、と思ってます。
今度の記事で卒研用に作成した実験用のpythonコードでも説明したいなと思ってます。
githubで公開でもしたいですね。