单下划线 / 双下划线
- 单下划线的函数或属性,protect,在类定义中可以调用和访问,类的实例可以直接访问,子类可以直接访问。
- 双下划线的函数或属性,是 private,在类定义中可以调用,类的实例和子类不可以直接访问。
访问类的双下划线属性(私有属性)
对于双下划线的函数或属性,Python解释器使用了名字混淆的方法,将__method
变为_classname__method
, 所以也是可以访问的。
class Singleton:
__instance = None
a = "a"
def __new__(cls, *args, **kwargs):
if not cls.__instance:
cls.__instance = super.__new__(cls, *args, **kwargs)
else:
return cls.__instance
if __name__ == '__main__':
print(Singleton._Singleton__instance)