Python初心者がステップアップするために覚えたいこと
Python初心者の方のコードを見て、よく感じることをまとめました。
対象はPython初心者の方ですが、他言語の経験はあるけれどPythonはまだ初心者、という方も含みます。
モジュールとクラスを使い分ける
※便宜上、モジュールに直接定義した関数を「関数」、クラス内の関数を「メソッド」と呼びます。
Pythonでは、必ずクラスを作成する必要はありません。
以下のサンプルコードを見てみましょう。
import youtube # クラスを使っていないモジュール from youtubelib import Youtube # クラスを使用したモジュール # youtubeモジュールのread関数を呼び出す youtube.read("url") # youtubelibモジュールのYoutubeクラスのreadメソッド呼び出し Youtube().read("url")
このように、関数へのアクセスと、メソッドへのアクセスは、非常に似たコードになります。
これらはどう使い分けるべきでしょうか。
クラスのインスタンス化が一度しか行われないような状況ならば、それはモジュールで充分なことが多いです。
少し難しい話ですが、モジュールはシングルトンとして利用ができます。
モジュールは継承ができず、継承を利用する場合はクラスを使います。
また、内部の変数等が違う複数のオブジェクトが欲しい場合も、クラスを使うべきです。
内包表記も使ってみよう
以下のようなサンプルコードがあります。
my_list = [] for i in range(10): my_list.append(i)
このコードは、以下の一文で書くことができます。
my_list = [x for x in range(10)]
内包表記はコード量が減り、パフォーマンス面でも優秀です。
積極的に使っていきましょう。
何でも自分で作らない
Pythonの組み込みデータ型は非常に優秀です。
まずはリストやタプル、辞書等で充分ではないかを確認しましょう。
collectionsモジュールのnamedtuple(名前付きタプル)もお勧めです。
また、リストや辞書を継承し新しく作ることは、特別な事情がない限りは避けましょう。適切に作るのは非常に大変です。
多くの場合、標準ライブラリのcollectionsモジュールやサードパーティ製のライブラリで代用ができます。
PEP8
Pythonのスタイルガイド、コーディング規約のガイドラインになります。
他のプログラマと共通のスタイルを使うことで、協調作業が捗ります。
例え自分しか見ないコードであっても、このガイドラインを守ることでコードが見やすく、扱いやすくなるため、是非守りましょう。
また、ドキュメントに関するガイドラインとしてPEP257もあります。
ゲッター、セッターは必須ではない
特にJavaの経験者の方によく見られます。
Pythonはプログラマが行儀よくコードを書くのが前提なため、ゲッター、セッター関数は必須ではありません。
入力チェック等を行いたい場合等、やむを得ない事情がある場合はゲッター、セッター関数ではなく
以下のように「プロパティ」を使用します。
class MyClass(): def __init__(self, name): self._name = name @property def name(self): return self._name @name.setter def name(self, value): if value: self._name = value else: print("不正な名前です")
「__name」のような変数名は、適切に使う
Pythonではプライベートな変数を使用したい場合に、「_name」のようなアンダースコア1つから始まる変数名と
「__name」のようなアンダースコア2つから始まる変数名をつけることができます。
基本的に、プライベートなフィールドは「_name」で充分です。
「__name」にすると外部からアクセスできないように見えますが、実際は「_ClassName__name」といった名前でアクセスができます。(ネームマングリングと呼びます)
そもそもこの機能は、親クラスと子クラスで名前が衝突しないように作られた機能であって、プライベートなフィールドを提供するための物ではないことに注意しましょう。