【问题标题】:What is the difference between using self._variable and just self.variable in the constructor in Python在 Python 的构造函数中使用 self._variable 和只是 self.variable 有什么区别
【发布时间】:2015-03-14 12:41:33
【问题描述】:

例如,如果我创建一个类 Point。

类点:

def__init__(self, x, y):
    self._x = x
    self._y = y 

类点:

def__init__(self, x, y):
    self.x = x
    self.y = y 

self._x 和 self.x 的使用有什么区别。

【问题讨论】:

    标签: python class instance-variables


    【解决方案1】:

    单下划线只是一种命名约定,表明该属性应被视为“半私有”(类似地,双下划线表示“私有”),但它没有语义差异:两个版本的代码都应该行为完全相同。根据PEP-8

    _single_leading_underscore:弱“内部使用”指标。例如。 from M import * 不导入名称以下划线开头的对象。

    single_trailing_underscore_ :按惯例使用,以避免与 Python 关键字冲突。

    __double_leading_underscore : 命名类属性时,调用名称修改(在类内FooBar__boo 变为_FooBar__boo)。

    __double_leading_and_trailing_underscore__ :存在于用户控制的命名空间中的“神奇”对象或属性。例如。 __init____import____file__。永远不要发明这样的名字;仅按文档说明使用。

    如果出于某种原因,您有一个带有下划线前缀的变量,并且可以公开访问该变量,那么最好在您的模块的__all__ list 中包含该变量的名称。这用作代码内文档的一种形式。

    【讨论】:

    • 双下划线似乎意味着引号中的粗体 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多