@kotyのブログ

PythonとかAWSとか勉強会のこととかを、田舎者SEがつづります。記事のライセンスは"CC BY"でお願いします。

第4回 オブジェクト指向設計実践ガイド 読書会 記録

nseg.connpass.com

各人それぞれの理由でキャンセルした人が何人かいたのもあり、参加者は今シーズン最少の4人でした。

スコープを制御するキーワードはrubyにはpublic/protected/privateがあるようですが、pythonにはありません。_(アンダースコア)を変数の先頭に1個つけると慣習的なprivate、2個つけると物理的なprivateという意味になります。*1

参考:9. クラス — Python 3.6.5 ドキュメント

class SomeClass(object):
    _some_protected_field = 'some_value'
    __some_private_field = 'some_value'

o = SomeClass()
print(o._some_protected_field)  # 呼べる
print(o.__some_private_field)  # ←これは実行時エラー
print(getattr(o, '__some_private_field'))  # コレもエラー
print(o._SomeClass__some_private_field)  # クラス名をつけると無理やり呼べる

最後のprivateフィールドに無理やりアクセスする方法は知らなかったかも。。この記事を書くにあたり調べました。そもそも普段はアンスコ1個のprivateフィールドしか使わないし。

デメテルの法則は普段の開発時に自然と意識しています。ピリオドが2個以上連なるとそれで良いかは一応考えます。考えてそのままにすることもよくありますが。

次回は11月です。もう年末だな。

nseg.connpass.com

*1:慣習的/物理的という表現はこの記事で私が勝手に言っているだけで本当はもっとちゃんとした用語があるのかもしれない