Python下划线使用详细总结!

Python也有类似于Java区分"private"和"public"变量的机制。在Python中,通常以下划线的不同使用方式来控制变量/方法的访问权限。

文末有Java修饰符总结表格~

1. 单个下划线开头 (_xx)

含义:说明该方法/变量仅供内部使用(只能在当前模块中使用!)
举个例子:
创建一个狗模块(dog.py),其中定义两个方法,一个正常命名(bark),狗汪汪叫;一个以单个下划线开头命名(_bark),狗喵喵叫

// dog.py
def bark():
    print("wong!")
def _bark():
    print("meow~")

现在引用dog模块,分别执行bark()_bark()。结果是,狗汪汪叫,但不会喵喵叫。因为外部模块无法调用_bark()

两个下划线开头 (__xx)

含义:用在类的继承,防止被子类被重写
举个例子方便理解:
定义一个父类father, 子类son, 其中年龄变量以双下划线开头。

class Father():
      def __init__(self):
         self.name = "john"
         self.__age = 40

class Son(Father):
      def __init__(self):
          self.name = "johnson"
          self.__age = 18
         
x = Son()
print(x.name)
print(x.__age)

当运行上述代码时,报错:
在这里插入图片描述
son并没有继承father的年龄属性,用x.__dir__()来看一下son目前的属性。
在这里插入图片描述
原来__age已经不是曾经的属性了,而是变成了_Son__age! 所以子类并没有真正的继承,防止父类中的_age被重写。如果确实要访问子类中的年龄,那么可以print(x._Son__age)

其余下划线用法:_ , xx_ , __ xx __

单个下划线(_)

  1. 指向最后一次执行表达式的结果
    举个例子:
    在这里插入图片描述
  2. 用于变量命名分隔符

单下划线结尾(x_):避免变量命名与关键词重复。比如一个变量名不能叫return, 但是可以叫return_。 但是不建议这么做!世界那么大,为什么非要和关键词过不去呢

首位双下划线(__ xx __) : python内置好的“魔法函数”,比如类的初始化方法def __init__(self) 。 自己命名时尽量避免这种命名方式哦!

顺便复习一下Java修饰符

在这里插入图片描述
(图片来自UCB CS61B课件)
黑色方框代表default, 即没有修饰符的情况。
四类权限级别分别为:

  • class ——— caller和callee位于一个class文件中
  • package ——— caller和callee位于同一个package下
  • subclass ——— caller是callee的子类
  • world ———全局访问
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页