Python 类的下划线命名

类的下划线命名


1、 _xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如: 当使用“from a_module import”时,不会将以一个下划线开头的对象引入 。不过值得注意的是,如果使用 import a_module 这样导入模块,仍然可以用 a_module._some_var 这样的形式访问到这样的对象。

2、 __xx 双下划线的表示的是私有类型的变量。不能在类地外部被使用或直接访问。在类内部的方法中使用时  self.__private_attrs。举例:如果 Test 类里有一成员 __x,那么 dir(Test) 时会看到 _Test__x 而非 __x。这是为了避免该成员的名称与子类中的名称冲突。

3、 __xx__定义的是特列方法。用户控制的命名空间内的变量或是属性。如类成员的 __init__、__del__、__add__、__getitem__ 等,以及全局的 __file__、__name__ 等。 Python 官方推荐永远不要将这样的命名方式应用于自己的变量或函数,而是按照文档说明来使用。

在这里强调说一下私有变量,Python默认的成员函数和成员变量都是公开的,没有像其他类似语言的public、private等关键字修饰。但是可以在变量前面加上两个下划线"_",这样的话函数或变量就变成私有的。这是Python的私有变量轧压(private name mangling) 。当变量被标记为私有后,在变量的前端插入类名,再类名前添加一个下划线"_",即形成了_ClassName__变量名。


一个简单的例子

类定义
class pub():
    _name = 'protected类型的变量'
    __info = '私有类型的变量'
    def _func(self):
        print("这是一个protected类型的方法")
    def __func2(self):
        print('这是一个私有类型的方法')
    def get(self):
        return(self.__info)
protected类型变量、方法的使用
>>> a = pub()
>>> print(a._name)
protected类型的变量
>>> a._func()
这是一个protected类型的方法
私有类型变量、方法的使用

私有类型的变量和方法 在类的实例中获取和调用不到

>>> print(a.__info)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'pub' object has no attribute '__info'
>>> a.__func2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'pub' object has no attribute '__func2'

如果想要在实例中获取到类的私有类形变量可以通过在类中声明普通方法,返回私有类形变量的方式获取

>>> a.get()
'私有类型的变量'

在私有变量的前端插入类名访问

>>> print(a._pub__info)
私有类型的变量


猜你喜欢

转载自blog.csdn.net/dta0502/article/details/80769191