Python网络爬虫技术与实战
上QQ阅读APP看书,第一时间看更新

1.9.2 封装性

所谓类的封装是指在定义一个类时,将类中的属性私有化,私有属性只能在它所在的类中被访问。为了能让外界访问私有属性,可以设置公共接口去获取或者修改属性值。

在例1-90进行Student类设计时,需要对age、name属性做一些访问限定,不允许外界随便访问。这就需要实现类的封装。我们通过修改如下代码来实现对Student类的封装。


# -*- coding:utf-8 -*-

# 类的创建
class Student(object):
    
    def __init__(self): 
        self.__name = ""  
        self.__age = 0
        
    def setName(self, name):
        self.__name = name 
        
    def setAge(self, age):
        if (age > 0):
            self.__age = age
        else:
            print "input age invalid"
        
    def getName(self):
        return self.__name
        
    def getAge(self):
        return self.__age        
if __name__ == '__main__':
    stu1 = Student()
    stu1.setName("Zhangsan")
    stu1.setAge(-1)
    print "stu1.getName() = %s" % (stu1.getName(),)
    print "stu1.getAge() = %d" % (stu1.getAge(),)

针对上述代码,这里给出相关说明。

1)name、age定义实例的私有属性。Python没有类似Java中的private、procoted、public的修饰符去区分实例私有属性和实例公有属性,而是通过观察在属性的名字前是否存在两个下划线作为开头,如果存在双下划线则表示其为私有属性;反之,则表示公有属性。

2)setName()、setAge()方法用于设置属性的值,可以在函数里增加逻辑以对输入的参数进行判断。getName()、getAge()方法作为外部接口,用于获取属性的值。这样就实现了对属性操作的封装。