Python编程系列教程第13讲——隐藏数据和封装
視頻地址:http://www.56.com/u88/v_OTM5NjU0MjE.html#fromoutpvid=OTM5NjU0MjE
普及網絡安全知識,推動信息技術發展。
為祖國的網絡安全撐起一片藍天,為網絡安全愛好者構建一方家園。
歡迎來到灰帽程序員論壇,我們的網址是:http://www.hmhacker.org
論壇是以技術交流為主(非商業性質論壇,不從事任何非法入侵活動)
分享知識,分享快樂,收獲友誼,收獲財富!
大家好,我是數字雨,QQ:798033502
今天給大家帶來的教程是《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)
轉載于:https://www.cnblogs.com/secbook/p/3190864.html
總結
以上是生活随笔為你收集整理的Python编程系列教程第13讲——隐藏数据和封装的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql服务的启动和停止 net st
- 下一篇: 图像处理工具包ImagXpress中如何