Python編程系列教程第13講——隱藏數據和封裝

視頻地址:http://www.56.com/u88/v_OTM5NjU0MjE.html#fromoutpvid=OTM5NjU0MjEhtml

普及網絡安全知識,推進信息技術發展。python

爲祖國的網絡安全撐起一片藍天,爲網絡安全愛好者構建一方家園。程序員

歡迎來到灰帽程序員論壇,咱們的網址是:http://www.hmhacker.orgweb

論壇是以技術交流爲主(非商業性質論壇,不從事任何非法入侵活動)編程

分享知識,分享快樂,收穫友誼,收穫財富!安全

你們好,我是數字雨QQ:798033502網絡

今天給你們帶來的教程是《Python編程系列教程第13講——隱藏數據和封裝函數

咱們看下面這樣的一個小例子。spa

假設:pwa

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)

相關文章
相關標籤/搜索