100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python变量名可以用下划线开头吗_python以下划线开头的变量和函数的作用

python变量名可以用下划线开头吗_python以下划线开头的变量和函数的作用

时间:2023-02-13 02:37:42

相关推荐

python变量名可以用下划线开头吗_python以下划线开头的变量和函数的作用

在python中,我们经常能看到很多变量名以_下划线开头,而且下划线的数量还不一样,那么这些变量的作用到底是什么?

变量名分类:

# 以数字、字母开头: 正常的公有变量名

a = 1

def aa():

pass

# 以单下划线开头: 半私有的变量名

_b = 2

def _bb():

pass

# 以双下划线开头: 私有变量名

__c = 3

def __cc():

pass

# 以双下划线开头,双下划线结尾: 内置属性名或者魔法方法名

__name__, __dir__

公有变量名:

以此类名称命名的对象,为公有对象,任何人都可以使用

半私有变量名:

以此类名称命名的对象,需要分为两种情况

1.类外

类外的半私有对象、私有对象,功能一致,均是在本模块中可以正常使用,但是不能被直接导入并调用

如果一定要在模块外使用,那么需要导入本模块,然后使用(模块名.变量名)进行调用

2.类中

类中的半私有对象,仅仅是概念上的私有,默认不要再类外进行调用

实际在类外,均可以使用(实例名.变量名/类名.变量名)进行调用

私有变量名:

以此类名称命名的对象,也需要分为两种情况

1.类外

此种情况下的对象,和半私有对象一样,可参照上面

2.类中

类中的私有对象,在类外均不能直接调用,可以理解为真私有

但是,python中没有完全私有的对象,此种对象也是可以在类外进行调用的,这里涉及到一个概念:矫直

class A:

def get_1(self):

return 1

def _get_2(self):

return 2

def __get_3(self):

return 3

print(dir(A))

结果为:

['_A__get_3', '__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__', '_get_2', 'get_1']

从打印结果中我们看到,类A并不存在__get_3这么一个属性,但是存在一个_A__get_3的属性,这就是矫直

python对于出现在类中的私有属性或者私有方法,进行矫直,矫直方法就是在私有属性名、私有方法名前添加(_类名)

那么,我们想要调用类的私有属性和方法的时候,就可以直接用矫直后的属性名进行调用

魔法方法:

这是python自己实现的属性和方法,一般不允许自定义类似此种命名方式的属性或者方法

关于这些方法和属性的作用,大家可以自己试一试

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。