pythonの_を簡単に理解および_区別と意味
Python中_および_の意味
_ の意味
pythonのクラスでは、メソッドでもプロパティでも、プログラミングの必要性のために下線を引く約束はありません.の属性とメソッドはAPIに属さず、クラスの外にアクセスすべきではなく、from M import*にもインポートされません.次のコードプレゼンテーションに_のメソッドと、クラスの外でアクセス可能です.
クラスAで定義された_methodメソッドは、クラスの外で直接呼び出すことはできません.外で使用できるようにします.methodメソッド、methodメソッドを定義し、methodメソッド呼び出し_メソッド.コードプレゼンテーションを参照してください.
しかし、私たちが覚えておくべきことは、追加することです.のメソッドは、クラスの外で呼び出すこともできます.
__ の意味
pythonの_name manglingという技術と関係があり、name mangling(name decoration命名修飾とも呼ばれる)である.多くの現代プログラミング言語において、この技術は、ネーミング競合/リロードなど、一意の名前を必要とする問題を解決するために用いる.[ウィキペディア]
コードのデモは次のとおりです.
クラスAにおいて、_methodメソッドは実はname manglingテクノロジーのせいで、_A__methodなので、Aでmethodメソッドが返すのは_A__method,BはAのサブクラスとして,_のみ書き換えた.methodメソッドは、methodメソッドを書き換えていないので、Bのmethodメソッドを呼び出すときに呼び出されるのはやはり_A__methodメソッド:
Aには_がありませんmethodメソッド、あるのはただ_A__methodメソッドは、外部で直接呼び出すこともできますので、pythonには本当のプライベート化はありません.
Bでmethodメソッドを書き換える:
Bのmethodメソッドが呼び出されます.B__methodメソッド:
まとめ
pythonには本格的な私有化はありませんが、プログラミング担当者に私有化が必要な場合を処理させるための命名に関する約束があります.
_ の意味
pythonのクラスでは、メソッドでもプロパティでも、プログラミングの必要性のために下線を引く約束はありません.の属性とメソッドはAPIに属さず、クラスの外にアクセスすべきではなく、from M import*にもインポートされません.次のコードプレゼンテーションに_のメソッドと、クラスの外でアクセス可能です.
class A:
def _method(self):
print(' , ')
def method(self):
return self._method()
a = A()
クラスAで定義された_methodメソッドは、クラスの外で直接呼び出すことはできません.外で使用できるようにします.methodメソッド、methodメソッドを定義し、methodメソッド呼び出し_メソッド.コードプレゼンテーションを参照してください.
In [24]: a.method()
,
しかし、私たちが覚えておくべきことは、追加することです.のメソッドは、クラスの外で呼び出すこともできます.
In [25]: a._method()
,
__ の意味
pythonの_name manglingという技術と関係があり、name mangling(name decoration命名修飾とも呼ばれる)である.多くの現代プログラミング言語において、この技術は、ネーミング競合/リロードなど、一意の名前を必要とする問題を解決するために用いる.[ウィキペディア]
コードのデモは次のとおりです.
------------------------------------------------------------------
[ -- : , , +Q :895817687]
------------------------------------------------------------------
class A:
def __method(self):
print('This is a method from class A')
def method(self):
return self.__method()
class B(A):
def __method(self):
print('This is a method from calss B')
クラスAにおいて、_methodメソッドは実はname manglingテクノロジーのせいで、_A__methodなので、Aでmethodメソッドが返すのは_A__method,BはAのサブクラスとして,_のみ書き換えた.methodメソッドは、methodメソッドを書き換えていないので、Bのmethodメソッドを呼び出すときに呼び出されるのはやはり_A__methodメソッド:
In [27]: a = A()
In [28]: b = B()
In [29]: a.method()
This is a method from class A
In [30]: b.method()
This is a method from class A
Aには_がありませんmethodメソッド、あるのはただ_A__methodメソッドは、外部で直接呼び出すこともできますので、pythonには本当のプライベート化はありません.
--------------------------------------------------------------------
[ -- : , , +Q :895817687]
--------------------------------------------------------------------
In [35]: a.__method()
AttributeError Traceback (most recent call last)
in ()
----> 1 a.__method()
AttributeError: 'A' object has no attribute '__method'
In [36]: a._A__method()
This is a method from class A
Bでmethodメソッドを書き換える:
class B(A):
def __method(self):
print('This is a method from calss B')
def method(self):
return self.__method()
Bのmethodメソッドが呼び出されます.B__methodメソッド:
In [32]: b = B()
In [33]: b.method()
This is a method from calss B
まとめ
pythonには本格的な私有化はありませんが、プログラミング担当者に私有化が必要な場合を処理させるための命名に関する約束があります.