Python 面向对象编程 OOP--02--类中的单下划线和双下划线 5 种情况

其余相关文章:

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):    
    access_count = 0 #这种类属性,可以读
    __comment="try" #加了_,就不能读了

2)如果该属性是实例属性,在类外使用 “类名/实例名.属性名字” 可以读取相关数据

class Man(object):    
    def __init__(self):

        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中最近一个表达式的结果

################### 求点赞,求转发,求评论,求收藏!#####################

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江南野栀子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值