class A():
def __init__(self,c):
print("给类变量__pool赋值")
self.__pool = "POOL {}".format(c)
self.__f()
def __f(self):
print("f",self.__pool,self.__pool.endswith("3"))
正常情况双下划线表示私有标量,用起来没有啥问题。但是:
一旦类私有变量和实例私有变量同名了,就有问题了, self.__pool 等于 A._A__class__, 这样可以很简洁的写出一个单例模式:
class A():
__pool = None
def __init__(self,c):
if not self.__pool:
print("给类变量__pool赋值")
self.__class__.__pool = "POOL {}".format(c)
# A.__pool = "POOL {}".format(c)
self.__f()
def __f(self):
print(id(self.__pool),id(self.__class__.__pool),id(A._A__pool))
print("f",self.__pool,self.__pool.endswith("3"))
具体效果,自己悟吧,哈哈