普及网络安全知识,推动信息技术发展。

为祖国的网络安全撑起一片蓝天,为网络安全爱好者构建一方家园。

大家好,我是数字雨

今天给大家带来的教程是《Python编程系列教程第13讲——隐藏数据和封装》

我们看下面这样的一个小例子。

假设:

0-10度为冰水
11-20度为凉水
21-60度为温水
61-90度为热水
91-100度为开水
__author__ = 'MXi4oyu'
class Heatupwater: #定义一个烧水的类,类名首字母大写
def __init__(self): #初始化水温是15度
self.temperature=15
self.level="凉水"
def heatup(self):
self.temperature+=10
def setlevel(self):
if(self.temperature>=0 and self.temperature<=10):
self.level="冰水"
elif(self.temperature>10 and self.temperature<=20):
self.level="凉水"
elif(self.temperature>20 and self.temperature<=60):
self.level="温水"
elif(self.temperature>60 and self.temperature<=90):
self.level="热水"
else:
self.level="开水"
def waterinfo(self):
self.setlevel()
print(self.level+":"+str(self.temperature)+"℃")
if __name__=='__main__':
h1=Heatupwater()
h1.heatup()
h1.waterinfo()
for i in range(4):
h1.heatup()
h1.waterinfo()
h1.temperature=0
h1.waterinfo()

你可能已经意识到了,查看或修改对象中的属性有两种方法。

一种是直接给属性赋值,例如:mywater.temprature=56

另一种是使用我们定义的heatup方法。那么直接跟给temprature赋值是不合理的,比如我们将水烧到89度,突然赋值为0度,这是不合理的。我们不想让temprature属性被外界直接赋值,我们想要的效果是只有当调用heatup方法时水温才会变化。为了达到这样的效果,我们通常使用私有属性把数据隐藏起来。

面向对象的三大特性是封装、继承和多态,封装概念的核心是:对象内部数据不应该从公共接口直接访问,如果对象用户想要改变对象的状态,就要使用访问方法和修饰方法。

Property()装饰器函数是一个内置函数,至多可接受4个参数,一个获取者函数,一个设置者函数,一个删除者函数,一个docstring。

使用@property的效果与仅使用一个参数(获取者函数)调用property()函数的效果是一样的。

def name(self):

return self__name

name=property(name)

但是简便起见,我们通常是用@property装饰器来修饰。

下面简单的封装下People类。

__author__ = 'MXi4oyu'
#!/usr/bin/python
#coding=utf-8
class People():
def __init__(self):
self.__name='jack'
@property
def name(self):
return self.__name
@name.setter
def name(self,value):
#我们通过这种方式就可以对name属性的值进行限定
if not isinstance(value,str):
raise TypeError("姓名必须为字符串")
else:
self.__name=value.title()
if __name__=='__main__':
p1=People()
p1.name="jack"
print(p1.name)