Pythonにおけるアクセス修飾子
しばらくPythonから離れていたので、細かいところを忘れていたのでメモ。
アクセス制限
PythonにはJavaのようにprivateとかprotectedみたいなアクセス修飾子がない。「_(アンダーバー)」による規則として扱う。
「_」のようにアンダーバーがひとつの場合は、オブジェクトの中で使用する変数。やろうと思えばオブジェクトの外からアクセスできるけど、あくまでクラスを作った人の意図を表すものとして使用する。
「__」のようにアンダーバーが2つの場合は、外からは簡単にアクセスできなくなる変数、Javaで言うところのprivateみたいな感じ。
class Foo: def __init__(self, name): self._name = name self.__name = name f = Foo('bar') print(f._name) print(f.__name)
一番下の行はエラーとなる。内部的な動きとしては__nameは難読化されてるだけで、アクセスしようと思えばできる。