auの日記

プログラミング初心者の日記。(auはハンドルネームです)

Pythonでprivate関数を作る方法

auです。

Javaを学んでいると、基本的なことで、privateやpublicといった、アクセスできる関数の範囲を制限する方法を学びます。

Pythonでそういえば学んでいないなと思い、調べてみました。

ちなみに、Pythonで宣言する関数は基本的にpablicらしいです。

やり方

まずは、classを作ります。

その中に、__(アンダースコアを二つ)付けた関数を作ります。

class Test():
    def __init__(self):
        print("init")

    def public(self):
        print("public")

    def __private(self): # ここがprivateな関数
        print("private")


ret = Test()
ret.public()
ret._Test__private() # privateな関数にアクセスする
ret.__private()

# 結果
init
public
private
Traceback (most recent call last):
  File "test.py", line 15, in <module>
    ret.__private()
AttributeError: 'Test' object has no attribute '__private'

結果をみたとおり、インスタンスを作成した時と、インスタンスメソッドにアクセスした時にprintが呼ばれています。

しかし、__を付けた関数には、アクセスできていません(一番下のやつ)

アクセスするには、3番目のように

_クラス名__プライベート関数名()

これで呼び出すことができます。