1.メソッド内でメソッドを定義する
2.メソッド最初にアンダースコアをつける(慣習)
例:
def _some_internal_func(self):
...
このうち、2.のメソッド名先頭にアンダースコアを付ける方法はただの慣習である。
もしメソッド名を知っている場合にはアクセスできてしまう。
いっぽう1.では、メソッド内メソッドはもとのメソッド内からだけ呼び出せる。
例
class SomeClass:
def __init__(self):
self.val = 0
def dummy_func(self):
def my_internal_func(self): # メソッド内メソッド
self.val = 123
my_internal_func(self)
s = SomeClass()
print('val 初期値: '+str(s.val))
s.dummy_func()
print('val 変更後: '+str(s.val))
# s.my_internal_func() とするとエラーになる。
結果
val 初期値: 0 val 変更後: 123