精华内容
下载资源
问答
  • 2015-07-02 13:16:00

    Python中并没有真正意义上的“私有”,类的属性的的可见性取决于属性的名字(这里的属性包括了函数)。例如,以单下划线开头的属性(例如_spam),应被当成API中非公有的部分(但是注意,它们仍然可以被访问),一般是具体实现细节的部分。单下划线常用来实现模块级私有化,当我们使用“from mymodule import *”来加载模块的时候,不会加载以单下划线开头的模块属性。

    而以双下划线开头并最多以一个下划线结尾的属性(例如___spam),将会被替换成_classname__spam这样的形式,其中classname是当前类的类名。知道了这点之后,我们仍然可以访问到python的私有函数

    转载于:https://www.cnblogs.com/blogofwyl/p/4615760.html

    更多相关内容
  • python 下划线意义

    2019-02-18 11:35:41
    python 下划线意义本文将解释下列五中下划线在python中的使用意义单一下划线:_单前导下划线:_var单末尾下划线:var_双前导下划线:__var双前导和双末尾下划线:_\_ var__ 本文将解释下列五中下划线在python中的...

    本文将解释下列五中下划线在python中的使用意义

    • 单一下划线:_
    • 单前导下划线:_var
    • 单末尾下划线:var_
    • 双前导下划线:__var
    • 双前导和双末尾下划线:__var__

    单一下划线:_

    单一下划线是用作一个名字,来表示某个变量是临时的或无关紧要的,或缺省。

    >>>for _ in range(0, 3):
        	print("python!") 
    python!
    python!
    python!
    >>>var, _, _ = 1, 0, 0
    >>>var
    1
    

    单前导下划线:_var

    python不像C++那样在“私有”和“公共”变量之间有很强的区别。 但是在python中,可以起到默认的小小的下划线警告标志,表示具有私有性质的成员属性,而不是真正会成为公共接口的一部分。

    >>>class FOO(object):
        	def __init__(self):
    	        self.f = 0
    	        self._f = 10
    >>>foo = FOO()
    >>>foo._f
    10
    

    单末尾下划线:var_

    单末尾下划线是由于像 class、def 这样的默认变量名称无法被使用,而采用添加单末尾下划线用以区分,来避免命名冲突。单个末尾下划线是一个约定,用来避免与Python关键字产生命名冲突。

    >>>def foo(var, class_)
    ...
    

    如果使用通配符从模块中导入所有名称,那么python不会导入带有前导下划线的名称(除非模块定义了覆盖此行为的__all__列表),大家可以尝试一下。

    双前导下划线:__var

    >>>class FOO(object):
        	def __init__(self):
    	        self.f = 0
    	        self._f = 10
    	        self.__foo = 12
    >>>foo = FOO()
    >>>dir(foo)
    ['_FOO__foo', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', 
    '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', 
    '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__',
     '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', 
     '__sizeof__', '__str__', '__subclasshook__',
     '__weakref__', '_f', 'f']
    

    我们能看到没有找到 ‘__foo’ 属性,但是多出了一个 '_FOO__foo’属性,这就是Python解释器所做的名称修饰, 这样做是为了防止变量在子类中被重写。而且该变量是无法直接获取的,是名称修饰,有点类似于私有成员,可以通过内部函数获取。

    >>>class FOO(object):
    		def __init__(self):
    			self.f = 0
    			self._f = 10
    			self.__foo = 12
    			self.__foo__ = 24
    		def get_f(self):
    			return self.__foo
    >>>f=FOO()
    >>>f.__foo
    File "***.py", line 2963, in run_code
        exec(code_obj, self.user_global_ns, self.user_ns)
      File "<ipython-input-16-5c407179b833>", line 1, in <module>
        f.__foo
    AttributeError: 'FOO' object has no attribute '__foo'
    >>>f.get_f()
    12
    >>>FOO()._FOO__foo
    12
    

    双前导和双末尾下划线:__var__

    一个变量名称同时以双下划线开始和结束,则不会应用名称修饰。 由双下划线前缀和后缀包围的变量不会被python解释器修改。

    >>>f.__foo__
    24
    

    python保留了有双前导和双末尾下划线的名称,用于特殊用途。例如,__init__对象构造函数,或__var__,使得一个对象可以被调用。最好避免在自己的程序中使用以双下划线开头和结尾的名称,以避免与将来python语言的变化产生冲突。

    展开全文
  • 编程中的下划线是什么意思?

    千次阅读 2021-05-22 17:44:49
    下划线在C没有特殊含义。一般在命名变量和方程用作断字符:integerarray,这样命名变量会很难看,一般会:integerArray 或者integer_array这样命名。一些程序包会经常看到:__Macro_A__ab。这类的变量命名原因是为了...

    下划线在C没有特殊含义。一般在命名变量和方程用作断字符:integerarray,这样命名变量会很难看,一般会:integerArray 或者integer_array这样命名。一些程序包会经常看到:__Macro_A__ab。

    这类的变量命名原因是为了避免命名重复。因为这些包被包含的时候他的头文件的每个变量会在该模块中占用一个命名。为了方便使用者的编写加入下划线从而使使用者命名变量时方便点。例如如果包中命名的是abc,那么使用者就不能使用abc来命名了。

    0d45ae1d70b1fd3d3013b30dbf473c2c.png

    扩展资料

    标志

    1、//  双斜杠是一种注释标志。 前面有//的语句只是用来注释的,不是程序的一部分,只是为了让你看懂你注释的内容是作什么用的。

    2、 /* */ 这个也是注释用的,只不过可以换行写。只要在两个符号之间的东西,都是注释 。不像上面只能写一行。

    3、 + - * / 这是基本的运算符了,跟数学里的加减乘除一样。 再加上一个 % ,这个是求余数的,就像这样 3/5=0余3. 在编程里表示成 3%5=3 。4.  & ,|,~ 这三个是对位操作用的,叫按位运算,即 0&1=0,1|0=1. !0=1.

    展开全文
  • python中单下划线和双下划线意义python中单下划线和双下划线意义python中单下划线和双下划线意义 __major__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突。 _major:一种约定,用来...

    p y t h o n 中 单 下 划 线 和 双 下 划 线 的 意 义 python中单下划线和双下划线的意义 python线线


    前导单下划线

    _major:一种约定,用来指定变量私有。具有前导下划线的类中的名称只是向其他程序员指示该属性或方法是私有的,但是,名称本身并没有什么特别之处.

    具有前导下划线的类中的名称只是向其他程序员指示该属性或方法是私有的。这是一种默认的惯例。不能用from module import *导入,其他方面和公有一样访问。

    这是一种指示内部使用的惯例约定。但是,Python并不会阻止任何人去访问带前导单下划线的属性,它仍可以被外界获取。这个惯例约定同样适用于模块,函数的命名。


    前导双下划线

    __major:这个有真正的意义:解析器用_classname__major来代替这个名字,以区别和其他类相同的命名。

    __double_leading_underscore:在命名一个类属性时,调用名称修改,比如:在类Major中,类属性__boo会变为_Major__boo

    前导双下划线的属性或方法名会改变成其它形式。调用名称修改的目的就是为了继承,为类提供一种简单的方法来定义“私有”实例变量和方法,而不必担心派生类定义的实例变量,或者通过类外部的代码来修改实例变量。


    双向双下划线

    __init__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突。

    __double_leading_and_trailing_underscore__:常见于Python内置的“魔术”对象或属性,例如,__init__,__import__或__file__,为了区别于用户自定义的__double_leading_underscore。它们会被Python系统调用的,不用用户自己调用。

    双向双下划线

    一般用于Python自己内置的方法属性。


    示例

    >>> class MyClass():
    ...     def __init__(self):
    ...         self.__superprivate = "Hello"
    ...         self._semiprivate = ", world!"
    ...     def __add__(self, new_str):
    ...         return " ".join([self.__superprivate, new_str])
    ...
    >>> mc = MyClass()
    >>> print(mc.__superprivate)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: myClass instance has no attribute '__superprivate'
    >>> print(mc._semiprivate)
    , world!
    >>> print(mc.__dict__)
    {'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}
    >>> print(mc + "xxx")
    Hello xxx
    

    在上面这个例子中,虽然我们认为_semiprivate是私有的,但我们还是可以直接调用,Python并没有真正的支持私有化,前导单下划线的私有性只是一种编程规范

    但是,我们无法直接使用mc.__superprivate,因为类属性__superprivate已经更名为_MyClass__superprivate

    这样的好处是,假象一下,你有一个子类MySubClass,它的私有属性就会重命名为_MySubClass__superprivate,而父类的私有属性就不会被覆盖。去修改子类的私有属性而不会去影响到父类。

    __add__是魔法方法,它是有Python系统自己调用。上例中,我们没有显式地调用它,而是使用运算符mc + "xxx",而其背后,Python就隐式调用了__add__

    Tips: 如果你定义的变量与某个保留关键字冲突,可以使用后置单下划线。

    展开全文
  • 介绍Python中单下划线和双下划线的使用。
  • 意义:python社区约定好单下划线表达的是某种意思,本身不会影响程序的行为 PEP8中定义:以单个下划线开头的变量或方法只在内部使用 这个符号对python解释器没有什么用,它只是个小小的提示:这个变量或方法并不是...
  • 总结: 变量: 1. 前带_的变量: 标明是一个私有变量, 只用于标明,外部类还是可以访问到这个变量 2. 前带两个_ ,后带两个_ 的变量: 标明是内置...3. 大写加下划线的变量: 标明是不会发生改变的全局变量 函数: 1...
  • 下划线含义

    千次阅读 2018-03-04 14:32:24
    由单下划线_开头的属性名或者函数名,代表只能这个类自己使用,自己的类的实例也可以使用,可以被继承。但是不能在别的地方用模块导入。 class A: @staticmethod def _a(): print('name') def __init__(self...
  • 2014年3月14日,谷歌搜索结果页标题取消了下划线,和20年的老习惯说再见。这是一个很小的改动,却是一个很大的变革,意义非凡。  下划线去掉之后 ,现在的搜索结果页面看起来简洁大方了许多,这是互联网页面最大的...
  • 在双下划线被称为“dunder”,它们调用特殊的方法,这些方法可以对对象产生一些非常巧妙的效果。它们不会改变意义,但它们是非常神奇的伏都教,是你腰带上的好工具。在__init__是一个神奇的方法,用于声明对象初始化...
  • import UIKit class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() funcDemo1(arg1: 2, arg2: 3) funcDemo2(a: 5, b: 2) funcDemo...
  • 下划线 _s : 保护变量 只有类对象和子类对象自己能访问到这些变量 _foo() : 不能直接访问的类属性 需要通过类提供的接口进行访问 双下划线 __s:私有成员 只能类对象自己能访问,子类对象也不能访问 s:...
  • 在 让我们转到您的for循环,然后(我还不使用下划线):>>> for main_dir, sub_dirs, files in os.walk('test'): ... print("Main directory: ", main_dir) ... print("Sub-directories: ", ', '.join(sub_dirs)) .....
  • (1)、以单下划线开头,表示这是一个保护成员,只有类对象和子类对象自己能访问到这些变量。以单下划线开头的变量和函数被默认当作是内部函数,使用from module improt *时不会被获取,但是使用import module可以...
  • 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下 划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用。 当变量是私有的时候,用_xxx...
  • 内容目录单下划线与双下划线的区别​ Python用下划线作为前缀和后缀指定特殊变量和定义方法,主要有如下四种形式:单下划线(_)名称前的单下划线(如:_name)名称前的双下划线(如:__name)名称前后的双下划线(如:_ ...
  • 下划线是什么

    2021-07-17 06:09:10
    下划线是什么下划线是什么?下划线就是字下面所划的线条。一般大家用在名字的输入中,(只可以输入数字,字母,下划线)而在一些文档(如WORD)中,...但这不是一条实际意义上的下划线。真正的下划线用来标注重要或引人...
  • Python 的代码风格由 PEP 8 描述。...1.变量_xxx,单下划线开头的变量,标明是一个受保护(protected)的变量,原则上不允许直接访问,但外部类还是可以访问到这个变量。这只是程序员之间的一个约定,用于警告说明...
  • “_”(下划线),可以简单理解为赋值但以后不再使用,在golang中使用比较多,使用场合不单一,这里稍作总结,方便理解 用在import 引入包,会先调用包中的初始化函数,这种使用方式仅让导入的包做初始化,而不使用...
  • &period;NET跨平台之旅:在Linux上以本地机器码&lpar;native&rpar;运行ASP&period;NET Core站点在将“.NET跨平台之旅”示例站点 about.cnblogs.com 从ASP.NET 5 RC1 升级至 ASP.NET Core 1.0 (博文...
  • 因为下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,我们建议程序员避免用下划线作为变量名的开始。一般来讲,变量名_xxx被看作是“私有 的”,在模块或类外不可以使用。当变量是私有的时候,用_xxx 来...
  • python 单下划线/双下划线代表的意义

    千次阅读 2018-07-24 19:09:46
    下划线对解释器有特殊的意义,而且是内建标识符所使用的符号,建议避免用下划线作为变量名的开始。一般来讲,变量名_object被看作是“私有的”,在模块或类外不可以使用,不能用'from moduleimport *'导入。当变量是...
  • 一、Python用下划线作为变量前缀和后缀指定特殊变量1. 单下划线开头:_xxx:弱“内部使用”标识,如:”from Module import *”,将不导入所有以下划线开头的对象,包括包、模块、成员2. 双下划线开头:__xxx:模块...
  • 大写加下划线的变量:  标明是 不会发生改变的全局变量 函数: 1. 前带_的变量: 标明是一个私有函数, 只用于标明, 2.  前带两个_ ,后带两个_ 的函数:  标明是特殊函数     ...
  • java类名加下划线

    千次阅读 2021-03-08 00:36:11
    它是以属性命名方式来区分,如果在属性名前面加了2个下划线'__',则表明该属性是私有属性,否则为公有属性(方法也是一样,方法名前面加了2个下划线的话表示该方法是私有的,否则为公有的)。class Plane(object):def ...
  • python中的下划线含义

    2021-01-29 04:47:57
    下划线和双下划线在Python变量和方法名称中都有含义。其中一些含义仅仅是按照惯例,作为给程序员的提示,而另外一些则由Python解释器执行。在本文中,主要讨论以下五种下划线模式和命名约定,以及它们如何影响...
  • 下划线、双下划线、头尾双下划线说明: __foo__: 定义的是特殊方法,一般是系统定义名字 ,类似__init__()之类的。 _foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,125
精华内容 36,850
关键字:

下划线意义