【问题标题】:How to work with access modifiers in python & __doc__?如何在 python 和 __doc__ 中使用访问修饰符?
【发布时间】:2015-06-18 07:38:06
【问题描述】:

oops 概念的新手,所以基本上我知道的大多是一般的oops 概念。但是尝试了很多使类中的变量成为公共私有和受保护的变量。我知道它们是使用带有变量名的 1 和 2 下划线完成的。您如何初始化访问修饰符,调用它们为它们设置值?基本上我正在寻找一个通用的例子/语法。

我也读过很多关于 python 的文章。但我从来没有找到与 doc 相关的东西,有人可以给我概述一下它是如何工作的。

非常感谢

【问题讨论】:

    标签: python python-2.7 oop python-3.x access-modifiers


    【解决方案1】:

    Python 没有私有字段或方法的概念。但是,以两个下划线开头但不以两个下划线结尾的标识符将与类名“错位”以防止意外覆盖。您可以找到更多信息here.

    这是语言的一部分。作为一种编程惯例,以单个下划线开头的标识符应该是考虑私有的。这是一个没有强制执行的礼貌请求......但留下单下划线名称是一个真正的好主意。

    我知道的另一个下划线约定是,当循环中不使用控制变量时,通常在 for 循环、列表解析或生成器表达式中使用由单个下划线组成的名称。例如,做某事 n 次可能如下所示:

    for _ in range(n):
        ...statements to repeat
    

    【讨论】:

    • PS:顺便说一句,这意味着__doc__ 没有被破坏,因为它以两个下划线结尾。
    • 正如他所问的那样,在这里解决单个下划线约定是正确的。
    【解决方案2】:

    Python 没有私有变量,以下划线 (_) 开头的属性表示它对其他程序员是私有的,请参阅here 了解更多详细信息。

    由于没有私有变量,以下划线开头的变量可以像其他任何变量一样进行修改。

    class MyClass():
         """Docstrings are important"""
         def __init__(self):
             self._myPrivateNumber = 42
    
    
    C = MyClass()
    C._myPrivateNumber #42
    C._myPrivateNumber = 1
    C._myPrivateNumber #1
    setattr(C, '_myPrivateNumber', -1)
    C._myPrivateNumber #-1
    

    我假设您也想了解__doc__。它被称为文档字符串,用于记录您的对象。它是在声明之后立即从字符串创建的,例如CC.__doc__ 的文档字符串是字符串"Docstrings are important" 你可以阅读它是如何创建的here。如果没有提供文档字符串,__doc__ 将是 ''。它们还用于创建帮助信息,即help(C) 将使用文档字符串。

    【讨论】:

      猜你喜欢
      • 2014-11-03
      • 2016-01-29
      • 2013-12-01
      • 1970-01-01
      • 2015-11-26
      • 2012-03-25
      • 2020-07-17
      • 2010-12-29
      • 2017-08-18
      相关资源
      最近更新 更多