类的数据封装可以通过类中的什么实现,数据封装是通过各种类型来实现的
类的封装和构造可以让我们更好的组织项目结构。
在这一章中,我们将学习类的封装。
学生类的定义和实例化,每个实例都有自己的名字和分数。如果现在需要打印学生的成绩,可以定义函数print_score()
这个函数是类外的,如下:
class Student(object):def _ _ init _ _(self,name,score):self . name=name self . score=score May=Student( May ,90)# Two attribute Peter=Student( Peter ,85) print (may.name,may.score) print (Peter.name,Peter . score)def print _ score(Student):#外部函数print _ score (student) # print (%s 的分数为:% d% (student.name,Student.score)) #普通打印书写打印({0})的分数为:{1}”。格式(学生。name,Student.score)) #建议使用Python 2.7。格式优化print _ score(may)print _ score(Peter)的写法。因为学生实例本身拥有这些数据,所以不需要从外部函数访问它。我们可以在学生类中定义直接访问数据的函数。这样,数据就被“封装”了。
“封装”是将抽象的数据和行为(或功能)组合起来,形成一个有机的整体(即类);封装的目的是增强安全性和简化编程。用户不需要知道具体的实现细节,只需要通过一个外部接口和一个特定的访问权限来使用类的成员。
这些封装数据的函数与学生类本身相关,我们称之为类方法。那么如何定义一个类的方法呢?
要使用对象self本身,参考上面的例子,把print_score()函数写成一个类方法(Python2.7以后的版本,把。格式输出书写方式推荐):
class Student(object):def _ _ init _ _(self,name,score):self . name=name self . score=score def print _ score(self):print( { self . name })的分数为:{self.score} 。format(self=self)) # Python 2.7。格式优化写作May=Student (May ,90) Peter=Student (Peter ,85)定义类的方法:除了第一个参数是self,其他函数和普通函数一样。
实例调用方法:只需要在实例变量上直接调用,除了self,其他参数正常传入;注意,如果类的方法只需要self,不需要其他,那么调用方法时只需要instance_name.function_name()。
这样,当我们从外部看学生类时,我们只需要知道创建一个实例需要给出名称和分数,如何打印是在学生类内部定义的。这些数据和逻辑被“封装”起来,可以很容易地调用,但我们不需要知道内部实现的细节。
封装的另一个好处是可以给学生类增加新的方法;这里的方法也可能需要传递参数,例如添加一个定义比较函数,如下所示:
class Student(object):def _ _ init _ _(self,name,score):self . name=name self . score=score def print _ score(self):print( { self . name })的分数为:{self.score} 。format(self=self)) # Python 2.7。格式以最佳方式写入def compare(self,s):if self . scores:print( better than % d %(s))elif self . score==s:print( equal % d %(s))else:print(低于%d %(s))May=Student(May ,90) Peter=Student(Peter ,85)May . print _ score()Peter . print _ score()May . compare(100)May . compare(90)May . compare(89)
历史提交的图片或压缩文件