zoukankan      html  css  js  c++  java
  • 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)

  • 相关阅读:
    爬虫练习:使用xpath 下载站长之家简历封面模板
    爬虫练习:Xpath基本使用
    爬虫练习:使用xpath爬取彼岸图网美女图
    爬虫练习:使用re模块爬取 糗图百科 图片
    爬虫练习:使用bs4爬取诗词名句网的《三国演义》
    爬虫练习:BS4基本使用
    爬虫练习:使用requests模块 爬取化妆品生产许可信息管理系统服务平台
    爬虫练习:贴吧 https://tieba.baidu.com/f?kw=友谊已走到尽头
    爬虫练习:使用 bs4以及正则,urllib.request 爬取 豆瓣TOP250爬虫
    记录kettle错误:无法从套接字读取更多数据 / TNS包错误
  • 原文地址:https://www.cnblogs.com/secbook/p/3190864.html
Copyright © 2011-2022 走看看