python中单下划线(_)和双下划线(__)的特殊用法
程序员文章站
2022-04-14 21:56:44
函数使用单下划线 开头 使用单下划线(_)开头的函数 不能被模块外部以: 形式导入。 但可以用: 形式单独导入。 类属性和类方法使用单下划线 开头 开头为保护类型的属性和方法,仅允许类内部和子类访问,类实例无法访问此属性和方法。 类属性和类方法使用双下划线 开头 开头为私有类型属性和方法,仅允许类内 ......
函数使用单下划线_
开头
使用单下划线(_)开头的函数_func
不能被模块外部以: from module import *
形式导入。
但可以用:from module import _func
形式单独导入。
类属性和类方法使用单下划线_
开头
_
开头为保护类型的属性和方法,仅允许类内部和子类访问,类实例无法访问此属性和方法。
类属性和类方法使用双下划线__
开头
__
开头为私有类型属性和方法,仅允许类内部访问,类实例和派生类均不能访问此属性和方法。
所以双划线比单划线权限更严格。
补充说明
对于__
开头的属性和方法如果派生类一定要访问,使用单下划线+基类名+双下划线开头的属性和方法
的形式,
且双下划线开头的属性和方法后面最多只能以一个单下划线结束,否则也无法访问。
class basecls: def __init__(self, name, age, nick_name): self.name = name self.__nick_name_ = nick_name # __nick_name后面最多以一个_结束,否则通过基类名混淆的方式也无法访问了。 self.age = age class subcls(basecls): def __init__(self, name, age, addr, nick_name): super().__init__(name, age, nick_name) self.addr = addr self.a_nick_name = self._basecls__nick_name_