学科分类
目录
基础

访问限制

类中定义的属性和方法默认为公有属性和方法,该类的对象可以任意访问类的公有成员,但考虑到封装思想,类中的代码不应被外部代码轻易访问。为了契合封装原则,Python支持将类中的成员设置为私有成员,在一定程度上限制对象对类成员的访问。

1.定义私有成员

Python通过在类成员名之前添加双下划线(__)来限制成员的访问权限,语法格式如下:

__属性名
__方法名

定义一个包含私有属性weight和私有方法info()的类PersonInfo,示例代码如下:

class PersonInfo:
    __weight = 55     # 私有属性
    def __info(self):  # 私有方法
        print(f"我的体重是:{__weight}")

2.私有成员的访问

创建PersonInfo类的对象person,通过该对象访问类的属性,具体代码如下:

person = PersonInfo()
person.__weight

运行代码,程序输出以下错误信息:

AttributeError: 'PersonInfo' object has no attribute '__weight'

注释访问私有属性的代码,在程序中添加如下的访问类中私有方法的代码:

person.__info()

运行代码,程序输出以下错误信息:

AttributeError: 'PersonInfo' object has no attribute '__info'

由以上展示的错误信息可以判断,对象无法直接访问类的私有成员。下面分别介绍如何在类内部访问私有属性和私有方法。

(1)访问私有属性

私有属性可在公有方法中通过指代类本身的默认参数“self”访问,类外部可通过公有方法间接获取类的私有属性。以类PersonInfo为例,在其方法中添加访问私有属性__weight的代码,具体如下:

class PersonInfo:
    __weight = 55     # 私有属性
    def get_weight(self):
        print(f'体重:{self.__weight}kg')

创建PersonInfo类的对象person,访问公有方法get_weight(),示例代码如下:

person = PersonInfo()
person.get_weight()

运行代码,结果如下所示:

体重:55kg

(2)访问私有方法

私有方法同样在公有方法中通过参数“self”访问,修改PersonInfo类,在私有方法__info()中通过self参数访问私有属性__weight,并在公有方法get_weight()中通过self参数访问私有方法__info(),示例代码如下:

class PersonInfo:
    __weight = 55     # 私有属性
    def __info(self):  # 私有方法
        print(f"我的体重是:{self.__weight}")
    def get_weight(self):
        print(f'体重:{self.__weight}kg')
        self.__info()

创建PersonInfo类的对象person,访问公有方法get_weight(),示例代码如下:

person = PersonInfo()
person.get_weight()

运行代码,结果如下所示:

体重:55kg
我的体重是:55
点击此处
隐藏目录