封装在Python中是什么?

什么是封装?

封装是OOP(面向对象编程)中的一个重要概念,目的是为了对对象的属性和方法进行访问控制,从而保证程序的安全性和稳定性。封装是OOP中的三大特性之一,另外两个是继承和多态。

封装的作用

封装可以将对象的内部实现隐藏起来,对外表现出一个稳定的接口,从而保证程序的安全性和稳定性。另外,封装可以使代码更加模块化,便于维护和升级。

封装的实现

在Python中,封装通过使用访问控制符来实现。Python中的访问控制符有两种,分别是双下划线“__”和单下划线“_”。其中,双下划线表示私有属性或方法,只能在类内部被访问,而单下划线表示受保护的属性或方法,可以被类及其子类访问,但是不建议在外部直接访问。

如何使用封装?

使用封装只需要定义类和属性/方法,并且使用访问控制符来控制其访问权限即可。下面是一个例子:

class Person:

def __init__(self, name, age):

self.__name = name

self._age = age

def get_name(self):

return self.__name

def set_name(self, name):

self.__name = name

def get_age(self):

return self._age

def set_age(self, age):

self._age = age

在上述代码中,我们定义了一个Person类,其中包括私有属性“__name”和受保护属性“_age”,以及四个方法,分别是构造方法“__init__”、获取名字的方法“get_name”、设置名字的方法“set_name”、获取年龄的方法“get_age”、设置年龄的方法“set_age”。由于“__name”是私有属性,所以只能在类内部使用,当我们想要访问它时,需要使用相应的方法来进行访问。

案例实现

下面我们通过一个案例来演示如何在Python中实现封装。

我们有一个学生类和一个教师类,他们都有姓名和年龄两个属性,同时学生还有学号这个属性,教师还有职称这个属性。现在我们要实现一个简单的程序,能够打印出学生和教师的信息。但是由于学号和职称这两个属性是私有的,所以在打印时不能将它们直接显示出来。

首先,我们定义一个Person类,其中包括姓名和年龄两个属性:

class Person:

def __init__(self, name, age):

self.__name = name

self.__age = age

def get_name(self):

return self.__name

def set_name(self, name):

self.__name = name

def get_age(self):

return self.__age

def set_age(self, age):

self.__age = age

上述代码中,“__name”和“__age”都是私有属性,只能在类内部使用。

接下来,我们定义一个Student类,继承自Person类,同时添加学号这个私有属性:

class Student(Person):

def __init__(self, name, age, number):

super().__init__(name, age)

self.__number = number

def get_info(self):

print("姓名:{},年龄:{},学号:{}".format(self.get_name(), self.get_age(), self.__number))

在上述代码中,我们通过继承Person类来实现学生类,同时添加了一个私有属性“__number”,表示学号。由于“__number”是私有属性,所以不能直接调用,在打印信息时需要使用“get_info”方法来显示信息。

接下来,我们定义一个Teacher类,同样继承自Person类,但是添加的是职称这个私有属性:

class Teacher(Person):

def __init__(self, name, age, title):

super().__init__(name, age)

self.__title = title

def get_info(self):

print("姓名:{},年龄:{},职称:{}".format(self.get_name(), self.get_age(), self.__title))

在上述代码中,我们同样通过继承Person类来实现教师类,但是添加了一个私有属性“__title”,表示职称。

最后,我们编写一个主程序,用来创建学生和教师对象,并打印他们的信息:

def main():

s = Student("张三", 20, "20210001")

s.get_info()

t = Teacher("李四", 35, "副教授")

t.get_info()

if __name__ == '__main__':

main()

在上述程序中,我们分别创建了一个学生对象和一个教师对象,并通过调用他们的“get_info”方法来打印它们的信息。

运行上述程序,我们可以得到如下输出结果:

姓名:张三,年龄:20,学号:20210001

姓名:李四,年龄:35,职称:副教授

从输出结果中可以看出,我们确实实现了封装,因为私有属性“__number”和“__title”并没有被直接打印出来。

总结

封装是OOP中的一个重要概念,可以将对象的内部实现隐藏起来,对外表现出一个稳定的接口,从而保证程序的安全性和稳定性。Python中的封装通过访问控制符来实现,其中双下划线“__”表示私有属性或方法,只能在类内部被访问,而单下划线表示受保护的属性或方法,可以被类及其子类访问,但是不建议在外部直接访问。使用封装时只需要定义类和属性/方法,并且使用访问控制符来控制其访问权限即可。

后端开发标签