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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/301165.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HijackThis日志细解【简明教程增强版】(五)

&#xff08;九&#xff09;组别——O51. 项目说明O5项与控制面板中被屏蔽的一些IE选项相关&#xff0c;一些恶意程序会隐藏控制面板中关于IE的一些选项&#xff0c;这可以通过在control.ini文件中添加相关命令实现。2. 举例O5 - control.ini: inetcpl.cplno 这里隐藏了控制面板…

java字符串如何输出_java字符串如何输出

在Java编程中&#xff0c;我们常常用 System.out.println(); 来输出字符串。System.out.println();System是一个类&#xff0c;继承自根类Objectout是类PrintStream类实例化的一个对象&#xff0c;且是System类的静态成员变量println()是类PrintStream的成员方法&#xff0c;被…

简单易懂的自动驾驶科普知识

全世界只有3.14 % 的人关注了数据与算法之美有不少人问我人工智能和自动驾驶的技术问题&#xff0c;我作为一个主业是后端开发的老码农可是回答不了啊&#xff01;今天转载一篇自动驾驶大拿写的文章&#xff0c;学习一下。先来一张各大车企自动驾驶技术的分级图&#xff0c;大致…

图像处理工具包ImagXpress中如何设置上下文菜单

ImagXpress 是世界上最先进的彩色映像和照片图像处理工具包&#xff0c;有着.NET、COM、VC三种组件形式。ImagXpress可以为开发者构建的应用程序提供图像浏览、编辑、打印、TWAIN扫描、文件格式转换等优秀的功能。本文先来看看它的一些基础设置&#xff0c;如何设置上下文菜单。…

Educational Codeforces Round 157 (Rated for Div. 2)

Educational Codeforces Round 157 (Rated for Div. 2) A 模拟 #include <bits/stdc.h>using namespace std;const int N 3e5 10;void solve() {int x , y , k;cin >> x >> y >> k;if(y < x){cout << x << endl;}else if(x k >…

WPF TextBox限制只能输入数字的两种方法

文本框中只能输入数字&#xff0c;一个常见的功能喽&#xff0c;今天就来看看如何实现它~下面就看看代码思路都写在xaml里面了&#xff0c;MainWindow.xaml:<Window x:Class"wpfcore.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/present…

r.java没有生成_R.java 常见问题(R.java文件没有生成 )

1、选择菜单 Project >> Clean &#xff0c;前提是勾选上 Bulid Automatically(自动构建部署) &#xff0c; 点Clean后会重新构建项目&#xff0c;因为一般情况下&#xff0c;R.java文件在这个时候会重新更新生成一边&#xff0c;如果工程有错&#xff0c;就不会自动生成…

SmartPart事件

姑且把这样的一件事情叫做事件&#xff01; SmartPart是一个非常好的Sharepoint用户控件包装器&#xff08;kaneboy开发的包装控件也非常好用&#xff09;&#xff0c;我们知道&#xff0c;在WSS2.0/SPS2003平台上只有两种方法创建你自己的WebPart&#xff1a; 1、使用MS官方提…

国家特级数学教授李毓佩:我们欠孩子真正的数学阅读 !

▲数据汪特别推荐点击上图进入玩酷屋说到数学&#xff0c;我想起了13年一场轰动行业各界的“数学无用论”&#xff01;那时微博上有个话题叫做#让数学滚出高考#&#xff0c;超过7成网友都表示支持&#xff0c;这可怕的比例就能说明在中国由于数学差导致命运被洗牌的真不在少数……

NET问答:null != variable 和 variable != null 到底有什么区别?

咨询区 mr_georg&#xff1a;在 C# 中&#xff0c;下面的两种写法在执行效率上是否存在差异&#xff1f;if (null ! variable) ... if (variable ! null) ...因为最近我经常看到这种非自然的写法 null ! variable&#xff0c;这让我感到很好奇&#xff0c;因为我觉得第二种写法…

分清词类

要学好英语&#xff0c;分清词类至关重要&#xff0c;每学一个词&#xff0c;要知道他的词类&#xff0c;是名词还是动词&#xff0c;这至关重要。每个词类都有其自己的特点&#xff0c;只有知道这个词&#xff0c;属于哪个词类&#xff0c;才能正确的使用它。同时还要弄清各个…

centos 6 x64 mysql_CentOS 6.x版本升级Mysql

首先确定一下自己的DNS vi /etc/resolv.conf 我一般为114.114.114.114#-----------------------------CentOS 6.x版本升级Mysql ------------------#! /bin/sh#1.关闭selinuxcp -rp /etc/selinux/config /etc/selinux/config.baksetenforce 0sed -i 7s/enforcing/disabled/…

关于Hibernate 3

Hibernate 3作了一些改进&#xff0c;改进了一些原来很显而易见的缺点。例如加了抽象语法树&#xff0c;但是在Hibernate 3.0 Beta1中&#xff0c;感觉还是有些不大成熟。从代码可以看出&#xff0c;Hibernate 3.0 Beta1的HQL AST使用了antlr&#xff0c;我向来不大喜欢这种使用…

程序员都想,却不敢做的事?我来!

一个 “实用” 的好命令&#xff0c;我不得试试&#xff1f;大家好&#xff0c;我是鱼皮。在编程届&#xff0c;有一个家喻户晓的实用 Linux 命令&#xff1a;rm -rf / 。据说&#xff0c;此命令一旦执行成功&#xff0c;就会给人带来快乐&#xff0c;是一个善良的好命令&#…

也来谈谈这致命的手机充电器

这两天有很多关于因使用iPhone在充电时打电话被电死的讨论&#xff0c;因此这里也来谈谈几点。 手机充电器的工作原理 刚好前段时间拆了两个充电器&#xff0c;看下里面的电路就明白了。鉴于网络上不明真相出来误导人的特别多&#xff0c;很多网站竟然还有文章说手机充电器里没…

每日一笑 | 一些关于学编程的领悟

全世界只有3.14 % 的人关注了数据与算法之美&#xff08;图源网络&#xff0c;侵权删&#xff09;

java基础变量_Java基础语法之变量和常量

上行没有"{"时&#xff0c;下行代码与上行首字母对齐标识符概述在Java中对变量、常量、函数和语句块都是有名字的&#xff0c;他们的名字统称为Java标识符。是为类、对象、方法、变量、接口和自定义数据类型命名的。组成标识符是由数字、字母、下划线(_)和美元符($)或…

GARFIELD@01-07-2005

completist 转载于:https://www.cnblogs.com/rexhost/archive/2005/01/07/88107.html

非常不错 Hadoop 的HDFS (Hadoop集群(第8期)_HDFS初探之旅)

1、HDFS简介 HDFS&#xff08;Hadoop Distributed File System&#xff09;是Hadoop项目的核心子项目&#xff0c;是分布式计算中数据存储管理的基础&#xff0c;是基于流数据模式访问和处理超大文件的需求而开发的&#xff0c;可以运行于廉价的商用服务器上。它所具有的高容错…

.net core 浅克隆和深克隆/浅拷贝和深拷贝

除非语言里只有基础类型&#xff0c;没有引用类型&#xff0c;否则用任何一种编程语言克隆对象都是很棘手的事情。1、前言"老沉&#xff0c;什么是深克隆&#xff0c;什么是浅克隆?"“哈&#xff0c;迷茫了&#xff1f;这深深浅浅的体验是不是把你搞晕了&#xff1f…