

Pythonのpropertyについて質問です。  
よく見かけるコードでは以下のようにインスタンス変数の前にアンダースコアがついていますが、  
これはどういう意味なのでしょうか？  
propertyを使うときには必要なのですか？

[code]

    class MyClass:
    
        def __init__(self, x):
            self._x = x
    
        @property
        def x(self):
            return self._x
    
        @x.setter
        def x(self, x):
            self._x = x
            do_something()
    
[/code]


CC BY-SA 3.0
2017-08-19T04:29:26.713
37326
2017-08-19T05:24:49.073
2017-08-19T05:20:09.613
19110
15279
question
python
pythonのpropertyの変数のアンダースコアの意味


名前がアンダースコアで始まる場合、そのインスタンス変数は慣習的にプライベート変数として扱われます。ただし本当のプライベート変数ではないので外側からアクセスすることが出来ます。

[9\. クラス — Python 3.6.1
ドキュメント](https://docs.python.jp/3/tutorial/classes.html#private-variables)

挙げられたコードの場合は、`_x`の代わりに名前`x`でアクセスできるようにゲッタとセッタが定義されていますね。ただ、特にアンダースコアが必要ということは無いはずです。

[2\. 組み込み関数 — Python 3.6.1
ドキュメント](https://docs.python.jp/3/library/functions.html#property)


CC BY-SA 3.0
2017-08-19T05:12:27.707
37328
2017-08-19T05:12:27.707
13199
37326
answer


名前の一番最初を1つのアンダースコアにするのは、「この変数はクラスの外側には公開されていない」ということを意味するための慣習的な名付けです。

このことはたとえば [PEP 8](https://www.python.org/dev/peps/pep-0008) に次のように書かれています。

> `_single_leading_underscore`: weak "internal use" indicator. E.g. `from M
> import *` does not import objects whose name starts with an underscore.

次の投稿も参考になります： ["What is the meaning of a single- and a double-underscore
before an object name?"](https://stackoverflow.com/q/1301346/5989200) \--
Stack Overflow


CC BY-SA 3.0
2017-08-19T05:19:09.410
37329
2017-08-19T05:24:49.073
2017-08-19T05:24:49.073
19110
19110
37326
answer