Python中_,,,_xx__方法の違い
1076 ワード
_xx一重下線の先頭
Pythonには本当のプライベート属性や方法はありません.プライベートと宣言したい方法と属性に下線を引いて、その属性と方法が外部で呼び出されないことを示すことができます.本当に呼び出してもエラーはありませんが、仕様に合致しません.
方法は、*にインポートされない単下線の先頭に定義されています(from module import*).
==================================================
#!/usr/bin/python
def singleton(cls): _instance={}#外部呼び出しdef_は推奨されませんsingleton(*args, **kargs): if cls not in _instance: _instance[cls] = cls(*args, **kargs) return _instance[cls] return _singleton
@singletonclass A(object): a = 1 def __init__(self, x = 0): self.x = x
a1 = A(2)a2 = A(3)
print id(a1)print id(a2)print a1.xprint a2.x
==================================================
__xx二重下線の先頭
二重下線の先頭は、この属性メソッドをサブクラスに書き換えないようにするためである.クラスのインスタンス化時に自動的に変換され、クラス内の二重下線の先頭のプロパティメソッドに「クラス名の実装
転載先:https://www.cnblogs.com/liuchunxiao83/p/11195819.html
Pythonには本当のプライベート属性や方法はありません.プライベートと宣言したい方法と属性に下線を引いて、その属性と方法が外部で呼び出されないことを示すことができます.本当に呼び出してもエラーはありませんが、仕様に合致しません.
方法は、*にインポートされない単下線の先頭に定義されています(from module import*).
==================================================
#!/usr/bin/python
def singleton(cls): _instance={}#外部呼び出しdef_は推奨されませんsingleton(*args, **kargs): if cls not in _instance: _instance[cls] = cls(*args, **kargs) return _instance[cls] return _singleton
@singletonclass A(object): a = 1 def __init__(self, x = 0): self.x = x
a1 = A(2)a2 = A(3)
print id(a1)print id(a2)print a1.xprint a2.x
==================================================
__xx二重下線の先頭
二重下線の先頭は、この属性メソッドをサブクラスに書き換えないようにするためである.クラスのインスタンス化時に自動的に変換され、クラス内の二重下線の先頭のプロパティメソッドに「クラス名の実装
class A(object):
def __init__(self,x):
self.__a=2
self.x=x
def __b(self):
self.x=3
a=A(2)
print (a.x,a._A__a)
a._A__b()
print(a.x)
転載先:https://www.cnblogs.com/liuchunxiao83/p/11195819.html