python__和_区别_【Python】对_和__差别的理解

在其他语言中,属性以_开头一般用于表示这个属性是私有属性,不能在外部访问。

在python中是不存在私有属性这种说法的。以_开头的属性,只是表名是私有属性,和API的调用没有关系。但是也是可以调用的

classA():def __init__(self):

self._private= "am I private?"a=A()print(a._private)

# 结果

# ‘am I private?’

以_ _开头的属性,可以实现私有的功能。但它真正的用途是防止子类重写该属性。

classA():def __init__(self):

self.__private = "am I private?"a=A()print(a.__private)# Traceback (most recent call last):

# File "E:/WWW/py3/test/config.py", line 7, in

# print(a.__private)

# AttributeError: 'A' object has no attribute '__private'

_ _private属性依旧可以被访问。以上的调用报错的原因,是调用错了名字。

_ _实现防止子类重写的原理,其实就是给属性改一个名字。

我们用dir()函数可以看到

classA():def __init__(self):

self.__private = "am I private?"a=A()print(dir(a))#['_A__private', '__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__']

这个'_A__private'其实就是__private。为了防止复写,给他改了个名字(总觉得这种处理方式有点萌哈哈哈哈)

所以如果想调用,甚至修改,只需要调用  a._A__private

但是别这么做啊!!!!

classA():def __init__(self):

self.__private = "am I private?"

deffunc(self):print(self.__private)

a=A()

a.func()

a._A__private= 'nonono'a.func()#am I private?#nonono

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值