LoginSignup
2
1

More than 5 years have passed since last update.

オブジェクトの中からしかアクセス出来ない “プライベート” インスタンス変数は、 Python にはありません。

Posted at

ちょっと色々あって調べたのでぺたり

# -*- coding: utf-8 -*-

class Hoge(object):

    def __init__(self):

        self.__foo = 'foo'
        self._bar = 'bar'


hoge = Hoge()

# AttributeError: 'Hoge' object has no attribute '__foo'
# print hoge.__foo

print hoge._bar
print hoge._Hoge__foo

print hoge.__dict__

実行結果

bar
foo
{'Hoge_foo': 'foo', '_bar': 'bar'}

なにかっちゅうとHoge.__fooはprivate風のプロパティだよと。
アンスコ2つ付けたプロパティはネームマンダリングが行われるからprivateっぽい挙動になるよとのこと。

変数の隠蔽が主目的じゃないっぽいのでそこは頭にとりあえず入れとく。

難号化の規則は主に不慮の事故を防ぐためのものだということに注意してください; 確信犯的な方法で、プライベートとされている変数にアクセスしたり変更することは依然として可能なのです。デバッガのような特殊な状況では、この仕様は便利ですらあります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1