Python“类”之访问限制

版权声明:转载请标明出处 https://blog.csdn.net/qq_41556318/article/details/88844802

类的访问限制

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

其中,在前面和后面都加双下划线的是系统的方法,比如 __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__():  天鹅的脖子很长
间接访问: 天鹅的脖子很长

猜你喜欢

转载自blog.csdn.net/qq_41556318/article/details/88844802