Python面向对象编程:类的封装与方法定义详解
本文深入解析Python面向对象中的类封装概念。通过Student类实例,演示如何将外部访问函数转化为类内部方法,利用self参数实现数据与行为的绑定。文章详细讲解了类方法的定义与调用方式,并展示了如何通过封装增强代码安全性与简化编程接口,帮助开发者掌握Python封装的核心技巧。
Python类封装概述
本文通过具体实例解析Python面向对象编程中类的封装操作,旨在为读者提供清晰的参考与学习思路。
从外部函数到类内部封装
在上一节《Python面向对象之类和实例》中,我们学习了Student类的定义及其实例化过程,了解到每个实例都拥有独立的name和score属性。若现在需要打印某个学生的成绩,可以定义一个外部函数 print_score() 来实现这一功能。
该函数定义在类的外部,具体代码结构如下所示:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
May = Student("May",90) # 须要提供两个属性
Peter = Student("Peter",85)
print(May.name, May.score)
print(Peter.name, Peter.score)
def print_score(Student): # 外部函数print_score(Student)
# print("%s's score is: %d" %(Student.name,Student.score)) # 普通 print 写法
print("{0}'s score is: {1}".format(Student.name,Student.score)) # 建议使用 Python 2.7 + .format优化写法
print_score(May)
print_score(Peter)
封装的定义与目的
既然Student实例内部已经存储了这些数据,就没有必要通过外部函数来访问。我们完全可以在Student类的内部定义访问数据的函数,从而将这些数据“封装”在类内部。
“封装”的本质是将抽象出的数据与行为(或功能)结合,形成一个有机的整体(即类)。封装的主要目的是增强系统的安全性并简化编程复杂度。使用者无需了解具体的内部实现细节,只需通过特定的外部接口和访问权限即可使用类的成员。
这些用于封装数据的函数与Student类本身紧密关联,我们称之为类的方法。那么,具体该如何定义类的方法呢?
类方法的定义与调用
这需要用到对象自身的引用 self。参考前例,我们将 print_score() 函数改写为类的方法(注:Python 2.7及之后的版本,推荐使用 .format 的输出格式进行优化):
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print("{self.name}'s score is: {self.score}".format(self=self)) # Python 2.7 + .format优化写法
May = Student("May",90)
Peter = Student("Peter",85)
定义类的方法时,除了第一个参数必须是self外,其余部分与普通函数的定义完全一致。
在实例中调用方法时,只需在实例变量上直接调用。除了self参数无需显式传递外,其他参数需正常传入;需要注意的是,如果类的方法仅需self而不需要其他参数,调用该方法时仅需使用 instance_name.function_name() 的形式即可。
经过上述处理,从外部观察Student类时,我们只需知晓创建实例需要提供name和score参数,而打印逻辑等具体实现均封装在Student类内部。这种封装使得数据与逻辑被隐藏起来,调用过程变得简单,同时无需关注内部实现的细节。
封装的优势与扩展
封装的另一个优势在于便于为Student类扩展新功能。例如,我们可以定义一个需要传参的compare函数,具体实现如下:
class Student(object):
def __init__(self, name, score):
self.name = name
self.score = score
def print_score(self):
print("{self.name}'s score is: {self.score}".format(self=self)) # Python 2.7 + .format优化写法
def compare(self,s):
if self.score>s:
print("better than %d" %(s))
elif self.score==s:
print("equal %d" %(s))
else:
print("lower than %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)
若读者对Python其他相关知识感兴趣,推荐查阅本站专题:《Python面向对象程序设计入门与进阶教程》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python编码操作技巧总结》及《Python入门与进阶经典教程》。
希望本文关于Python程序设计的阐述能对各位读者有所助益。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













