其余相关文章:
Python 面向对象编程 OOP--01--类和实例的基本概念
Python 面向对象编程 OOP--02--类中的单下划线和双下划线 5 种情况
Python 面向对象编程 OOP--03--类的组合和派生Python 面向对象编程 OOP--01--类和实例的基本概念
Python 面向对象编程 OOP--04--多重继承和方法解释顺序 MRO
Python 面向对象编程 OOP 05--类、实例和其他对象的内建函数
Python 面向对象编程 OOP--06--super() 是一个描述器类
---------------------------------------------------------------------------------------------------------------------------------
Python 面向对象编程 OOP--类和实例的基本概念 中描述了类和实例的概念,但是大家经常被类和实例中的单下划线和双下划线搞混,搞清楚这点还真挺重要。
举例 | 含义 | |
单前导下划线 | _abc | 含义:命名约定,仅供内部使用,是建议而不是强制性的,在PEP 8中有定义。 影响: 1)如果该属性是类属性,在类外使用 “类名/实例名.属性名字” 是无法读取相关数据的,并提示 “AttributeError” 错误 class Man(object): 2)如果该属性是实例属性,在类外使用 “类名/实例名.属性名字” 可以读取相关数据 class Man(object): self._comment="c" #这种实例属性,可以读 3)import * from modulename 即通配符导入时候 _开头的变量不会被导入,除非模块定义了覆盖此行为的__all__列表。 4)import _x from modulename 常规导入不受前导单个下划线命名约定的影响 |
单末尾下划线 | abc_ | 含义:按约定使用以避免与 Python 关键字的命名冲突,其余和普通变量一样,也就是如果不是和 Python 关键字一致,没必要特意使用_。import 没什么区别。 |
双前导下划线 | __abc | 双前导下划线前缀会导致 Python 解释器重写属性名称,以避免子类中的命名冲突。这也叫做名称修饰(name mangling) - 由Python解释器强制执行。 影响: 1. 在类外使用 “类名/实例.属性名字” 是无法读取相关数据的,并提示 “AttributeError” 错误 2. 使用dir() 函数查看修饰后的名字,可以用“类名/实例名.修饰后的属性名字”读取 |
双前导和双末尾下划线 | __xx__ | 含义:表示 Python 语言定义的特殊方法,使用 dir() 能看到很多特殊方法,如 __init__、__del__,被称为魔法函数。 范围:用户可以在自己定义的类中使用 __xx__ 方法,但是建议不要使用这种命名方案,因为容易混淆。 |
单下划线 | _ | 含义: 1) 有时用作临时或无意义变量的名称(“不关心”)。for _ in XXX 2) 表示Python REPL中最近一个表达式的结果 |
################### 求点赞,求转发,求评论,求收藏!#####################