2016-11-20 5 views
1

_single_leading_underscore _single_leading_underscore関数がインポートされるのはなぜですか?

PEP 8に従うように私が見つかりました:弱い "内部使用" インジケータが。例えば。 "from M import *"は、名前が のアンダースコアで始まるオブジェクトをインポートしません。

これをコードでテストします。私は2つのファイルを作る。 1つは「importing_A.py」、もう1つは「A.py」です。私は次のようにコード化しました。

importing_A.py:

from A import * 
a_class = Test() 
a_class._single_underscore() 

A.py:

class Test: 
    def _single_underscore(self): 
    print("executed _single_score()") 

と "importing_A.py" を実行。単一のアンダースコア関数が「弱い内部使用」の指示であるため、_single_underscore関数を見つけることができないとの結果が出てくると思いました。しかし、結果は "executed _single_score()"を実行して実行されます。

何が問題なのか分からなかった。何か考えてもらえますか? ありがとうございます。

+1

方法は、種類(および機能)をしているインポートされません。メソッドの標準可視性ルールが適用されます。 2つのアンダースコアを使用してメソッドの名前を付けることができますが、それは単に呼び出すのが難しくなります。 – Voo

答えて

2

from A import *Testをインポートしました。別のクラスがある場合は... _Test、インポートされません。

基本的に、オブジェクトがインポートされると、そのオブジェクトのメソッド/プロパティすべてにアクセスできます。先頭のアンダースコアでは、の最上位のオブジェクトはインポートされません(from module import *を使用する場合のみ)。

a.pyで:

class Test(object): 
    pass 

class _Test(object): 
    pass 

我々が得る:オブジェクト上の

>>> from a import * 
>>> Test 
<class 'a.Test'> 
>>> _Test 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
NameError: name '_Test' is not defined 
関連する問題