更新时间:2022-08-03 来源:黑马程序员 浏览量:
通常把隐藏属性、方法与方法实现细节的过程称为封装。为了保护类里面的属性,避免外界随意赋值,可以采用如下方式解决:
·把属性定义为私有属性,即在属性名的前面加上两个下划线。
·添加可以供外界调用的两个方法,分别用于设置或者获取属性值。
  在介绍封装之前,我们先来看一段示例代码,具体如下:
class Person: # 定义一个类
    def __init__(self, name, age): # 构造方法
        self.name = name # 姓名
        self.age = age   # 年龄
person = Person("老王", 30) # 创建一个对象
person.age = 300
print(person.age)在上述示例中,定义了一个Person类,该类中有name(姓名)和age(年龄)两个属性。使用Person类的构造方法创建一个对象,并设置nage和age的初始值为“老王”和“30”,接着动态地设置age的值为300.从现实生活角度来看,这个年龄的设置是不符合逻辑的。
下面采用封装的方式,对上述代码进行修改,具体如例12-1所示。
  例12-1 私有属性.py
class Person: # 定义一个类
    def __init__(self, name, age): # 构造方法
        self.name = name # 姓名
        self.age = age   # 年龄
    # 给私有属性赋值
    def set_age(self, new_age):
        # 判断传入的参数是否符合要求,符合后才能赋值
        if new_age > 0 and new_age <=120:
            self._age = new_age
    # 获取私有属性的值
    def get_age(self):
        return self._age
# 创建对象
person = Person("老王", 30)
print(person._age)在例12-1中,定义了一个Person类。其中,第4行在构造方法中添加了一个私有属性_age,然后在第6~9行定义了一个给私有属性赋值的方法,通过使用if语句来判断设置值的合理性,然后在第11~12行定义了一个供外界获取私有属性值的方法。第14~15行使用构造方法创建一个Person类的对象,并将直接获取到的_age属性的值打印出来。运行程序后,程序出现如下错误信息,具体如图12-1所示。
  从图12-1提示的错误信息可以看出,在Person类中没有找到_age属性。出现上述问题,原因在于_age属性为私有属性,类的外面无法知道类里面的私有属性,更无法访问类的私有属性。所以,为了能在外界访问私有属性的值,需要用到该类提供的用于设置和获取属性值的方法。

图12-1 提示没有_age属性的错误信息
  在例12-1中,把第15行代码改为调用set_age和get_age方法分别对属性进行赋值和取值的操作,代码如下。
person.set_age(31) print(person.get_age())
  程序运行的结果如图12-2所示。

图12-2 运行结果
从图12-2的结果可以看出,外界通过提供的set_age和get_age方法分别设置和获取了私有属性_age的值。Python中没有任何关键字来区分公有属性和私有属性,它是以属性命名的方法进行区分的,如果属性名的前面加了两个下划线,就表明该属性是私有属性,否则就是公有属性。
1024首播|39岁程序员逆袭记:不被年龄定义,AI浪潮里再迎春天
2025-10-241024程序员节丨10年同行,致敬用代码改变世界的你
2025-10-24【AI设计】北京143期毕业仅36天,全员拿下高薪offer!黑马AI设计连续6期100%高薪就业
2025-09-19【跨境电商运营】深圳跨境电商运营毕业22个工作日,就业率91%+,最高薪资达13500元
2025-09-19【AI运维】郑州运维1期就业班,毕业14个工作日,班级93%同学已拿到Offer, 一线均薪资 1W+
2025-09-19【AI鸿蒙开发】上海校区AI鸿蒙开发4期5期,距离毕业21天,就业率91%,平均薪资14046元
2025-09-19