知行编程网知行编程网  2022-11-15 08:30 知行编程网 隐藏边栏  5 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python是如何实现封装的的相关知识,希望可以帮到处于编程学习途中的小伙伴

python是如何实现封装的

封装的目的是为了保护隐私,把不想让别人知道的东西封装起来。让我们通过一个例子来理解这个包

定义了 Student 类和实例化,每个实例都有自己的名称和分数。现在如果你需要打印一个学生的成绩,你可以定义函数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类本身是关联起来的,我们称之为类的方法。那如何定义类的方法呢?

有必要使用对象自身。参考上面的例子,将print_score()函数写成类方法(Python2.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)

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享