Python中的私有变量的下划线

2020-09-25 08:50:00
六月
转贴 814

1.单下划线

变量前的单下划线表示表面上私有 ,但是其实这样的实例变量外部是可以访问的,但是,按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问”。

2.双下划线

变量前的双下划线表示真正的私有,实际上的私有,只有内部可以访问,外部不能访问 

但是有窍门,可以在类里面增加get__namedede和set__namedede这样的方法来突破限制,而且还能在方法里做验证。

3.前后双下划线(如:__init__):

名称前后的双下划线是一种惯例,对Python系统来说,这将确保不会与用户自定义的名称冲突。通常,你将会覆写这些方法,并在里面实现你所需要的功能,以便Python调用它们。 


双下划线一般再类里面使用,对类里面的变量进行封装,类中的方法也同理

class A:

  def __init__(self):

       self.__a= '111'

a = A()

#a你就没法.出他的__a属性,硬是要获得只能a._A__a

但是类内你就可以__a获得他的属性

_xx:单前置下划线,私有化属性或方法,类对象和子类可以访问, from somemodule import* 禁止导入

__xx:双前置下划线,私有化属性或方法,无法在外部直接访问(名字重整所以访问不到)

#__x主要是针对类,不是类你毫无意义

#_x主要针对导入

导入我给你举个例子好了

aaa.py

def _a():

    print('hello ')

1.py

from aaa  import *

_a()

#NameError: name '_a' is not defined    不能通过from aaa from * 导入

2.py

from aaa  import _a

_a()

#hello                   可以通过from aaa import _a 导入

python变量命名规则:

在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。

Python 中的标识符是区分大小写的。

以下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。

以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。

f-string 格式化字符串以 f 开头,后面跟着字符串,字符串中的表达式用大括号 {} 包起来,它会将变量或表达式计算后的值替换进去。如下:

list1 = [1,' xiaoming', 29.5, '17312662388']

for _ in list1:

    print(f'{_}的类型为{type(_)}')


参考: https://www.cnblogs.com/Paul-watermelon/p/11165178.html

https://q.cnblogs.com/q/121801/

https://www.runoob.com/python/python-basic-syntax.html

发表评论
评论通过审核后显示。