具有单下划线或双下划线前缀的函数和变量

3

我在许多编程语言(如PHP和Python)中看到了以下划线开头的函数和变量,对此深感困惑。


1
请参考PEP8:描述性命名风格,以获取一些Pythonic指导(可以注意到某些描述的约定在核心Python协议和方法中使用,例如__init__遵循这些约定)。无论如何,关键点是指导 - user2864740
在 PHP 中有魔术常量。请参考 http://php.net/manual/en/language.constants.predefined.php。 - Joe T
2个回答

6
假设在PHP中使用正常的约定:
  • 单下划线表示受保护的成员变量或方法
  • 双下划线表示私有成员变量或方法
这是因为在PHP具有弱OOP支持且没有私有和受保护的概念时,采用此约定可以使开发人员指示成员变量或方法是私有或受保护的,以更好地传达给代码的用户。
不过,用户可以选择忽略这些语义并调用“私有”和“受保护”的成员变量和方法。

3
单下划线在Python中对于类/实例属性没有特殊含义。按照惯例,它表示私有变量/函数。使用from module import *不会导入以单下划线开头的变量和函数。(感谢Bi Rico)
双下划线触发名称修饰。这使得类拥有与其子类中同名但不同的属性。

我至少能想到一个地方,前导下划线具有特殊含义,“from module import *”不会导入以单个下划线开头的函数和变量。 - Bi Rico
@BiRico,谢谢。我正在思考类/实例属性。 - John La Rooy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接