Python“类”之访问限制

类的访问限制

要让内部属性或者方法不被外部访问,可以把在属性或者方法的名称前加上单下划线_, 或者在前面加双下划线__,或者两边加双下划线。

其中,在前面和后面都加双下划线的是系统的方法,比如 __init__() 方法。

在前面加一个下划线的表示保护类型的成员,对于这样的属性和方法,只允许类本身和子类可以访问。

例如:

class Swan:
    """天鹅类"""
    _neck_swan = "天鹅的脖子很长"  # 保护类型的属性
    def __init__(self):
        print("__init__(): ", Swan._neck_swan)  # 访问保护类型的属性

swan = Swan()  # 实例化Swan类的实例(对象)
print("直接访问:", swan._neck_swan)  #通过实例名访问保护类型的属性
>>> 
__init__():  天鹅的脖子很长
直接访问: 天鹅的脖子很长

两个下划线开头的是私有类型的成员,可能是私有类型的属性或者方法,这样的方法只允许定义它的类本身可以访问,我们不能通过类的实例直接访问,但是可以通过 类的实例名._类名__xxx 访问。

例如:

class Swan:
    """天鹅类"""
    __neck_swan = "天鹅的脖子很长"  # 私有类型的属性
    def __init__(self):
        print("__init__(): ", Swan.__neck_swan)  # 访问私有类型的属性

swan = Swan()  # 实例化Swan类的实例(对象)
print("直接访问:", swan.__neck_swan)  #通过实例名访问私有类型的属性
>>> 

__init__():  天鹅的脖子很长
Traceback (most recent call last):
  File "C:/Users/XiangyangDai/Desktop/1.py", line 8, in <module>
    print("直接访问:", swan.__neck_swan)  #通过实例名访问私有类型的属性
AttributeError: 'Swan' object has no attribute '__neck_swan'
class Swan:
    """天鹅类"""
    __neck_swan = "天鹅的脖子很长"  # 私有类型的属性
    def __init__(self):
        print("__init__(): ", Swan.__neck_swan)  # 访问私有类型的属性

swan = Swan()  # 实例化Swan类的实例(对象)
print("间接访问:", swan._Swan__neck_swan)  #通过实例名访问私有类型的属性
>>> 

__init__():  天鹅的脖子很长
间接访问: 天鹅的脖子很长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值