↓のようなクラスがあったとします。
python3
1class Animal: 2 def hello(self): 3 print("hello") 4 5 def _hello(self): 6 print("hello") 7 8 def __hello(self): 9 print("hello") 10 11a = Animal()
ここで、それぞれの関数を実行してみると、a.hello()およびa._hello()は無事に実行することができます。しかし、a.__hello()を実行しようとすると、エラーが出ます。
AttributeError: 'Animal' object has no attribute '__hello'
調べたところ、a._Animal__hello()のように実行すると関数を呼び出せるみたいで、私の環境でもちゃんと動きました。
疑問点
前半部分(prefix?)にアンダースコアーを1つ付ける場合と2つつけた場合、どちらもprivateメゾットを表せるらしいですね(Pythonの場合は表すだけで実際にはそうらならないが)。
私の認識としては、アンダースコアー1つよりも、アンダースコアー2つのほうが単純に制約として大きいってだけな気がするのですが、皆さんはどのように使い分けてるのか教えていただきたいです〜!
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/03/14 02:34