Python进阶-----面向对象3.0(面对对象三大特征之---封装)

2023-11-13

目录

前言:       

什么是封装

Python私有化封装

习题


前言:       

        上一期是讲解Python中类的私有属性和方法,其实很好理解,我给一个类中的部分属性进行加密拒绝访问(上一期链接Python进阶-----面向对象2.0(特有属性和方法与私有属性和方法)_Python欧尼酱的博客-CSDN博客),其实这是一种封装的体现。其实日常生活中有很多事物都是进行过封装处理,比如说一个箱子,里面封装了一些物品;一些个人信息资料,也是进行了加密处理,这些都是封装的体现。当然代码也是可以去封装的,而且封装还是Python面对对象的三大特征之一,下面就一期来看看吧。

什么是封装

        封装是一种编程思想,不仅仅是Python中有的,通过封装我们可以去把一些代码块功能或者数据进行打包处理,这样我们就不需要关系里面具体的代码细节,要用的时候就拿出来用就行了,一个函数也是一种封装体现,我们想用就用,并不会影响代码的整体性。这就是封装的好处

 封装的意义封装的最大好处是提高程序的安全性,提高程序的运作效率

举个例子:当我们去做一个项目的时候,我们会把这个项目的各个功能分开处理,而不是全部放到一起,分开处理的过程其实就是一个封装处理过程,这样使得程序具有高内聚,低耦合的特点,而不是出现牵一发而动全身,使得程序运行更加稳定。

 在Python面向对象中狭义的封装也就是对一个类对一些属性和方法进行封装,或者累中的成员再次进行封装处理,下面先看个例子。

 没有封装处理的代码:

if __name__=='__main__':
    user_name=input('账号:')
    password=input('密码:')
    if user_name=='root' and password=='123456':
        print('登陆成功!')

进行封装处理的代码:

class User(object):
    def __init__(self,user_name,password):
        self.user_name=user_name
        self.password=password
    def login(self):
        if self.user_name=='root' and self.password=='123456':
            print('登陆成功!')
if __name__=='__main__':
    u=User('root','123456')
    User.login(u)

这样对比就很明显了。

Python私有化封装

在Python中定义一些属性的时候,我们要对一些重要的信息进行加密封装处理,也就是进行私有化,外部的实例对象是无法去访问的,而在类的内部是可以去调用的,所以我们可以在类中定义相关方法作为一个验证,当验证通过时才可以去访问相关信息,实例如下: 

class User(object):
    def __init__(self,user_name,password,test='abcde'):
        self.user_name=user_name
        self.__password=password #密码加密私有化
        self.__test=test         #验证信息加密
    def login(self):
        if self.user_name=='root' and self.__password=='123456':
            print('登陆成功!')
    def getpassword(self,test): #建立一个验证信息从而访问密码
        if test==self.__test:
            return self.__password
        return False
if __name__=='__main__':
    u=User('root','123456')
    print(u.user_name)
   # print(u.__password) 是访问不到了,因为password被私有化了
    User.login(u)
    print(u.getpassword('abcde'))
#输出结果:
# root
# 登陆成功!
# 123456

习题


   利用类完成一个简易的计算器
   1、属性为两位参与计算的数字
   2、实现加减乘除的四种计算方法

    1 , 定义一个人类
    2 , 人物属性 : 性别 , 身高 , 体重, 健康度 ...
    3 , 方法1 : 跑步 : 体重减少0.5 , 健康度增加 0.01
    4 , 方法2 : 走路 : 体重减少0.01
    5 , 方法3 : 吃饭 : 体重增加0.8 , 健康度增加 0.05
    6 , 方法4 : 睡懒觉 : 体重增加2, 健康度增加 2

 你们可以去做做看

答案:

#1.计算器
class calc:
    def __init__(self):
        print('the result is')
    def __add(self,num1,num2):
        return num1+num2
    def __sub(self,num1,num2):
        return num1-num2
    def __mul(self,num1,num2):
        return num1*num2
    def __div(self, num1, num2):
        return num1/num2
    def computer(self,num1,num2,count):
        if count=='add':
            return self.__add(num1,num2)
        elif count=='sub':
            return self.__sub(num1,num2)
        elif count=='mul':
            return self.__mul(num1,num2)
        elif count=='div':
            return self.__div(num1,num2)
# if __name__=='__main__':
#     a=int(input('num1:'))
#     b=int(input('num2:'))
#     count=input('count:')
#     com=calc()
#     end=com.computer(a,b,count)
#     print(end)

#2.human bing
class humanway:
    def __init__(self,gander,height,weight,health):
        self.gandef=gander
        self.height=height
        self.weight=weight
        self.health=health
    def running(self):
        self.weight -=0.5
        self.health +=0.01
    def walking(self):
        self.weight -= 0.01
    def eating(self):
        self.weight += 0.8
        self.health += 0.05
    def sleeping(self):
        self.weight += 2
        self.health -= 2
# people=humanway('male',1.75,60,1.0)
# print(people.weight,people.height,people.health)
# people.eating()
# print(people.weight,people.height,people.health)

好了,以上就是Python封装的基本内容了,thanks~~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python进阶-----面向对象3.0(面对对象三大特征之---封装) 的相关文章

随机推荐

  • Unity鼠标样式发布后不正常

    环境 Unity5 4 2f2 Texture2D img Texture2D Resources Load Textures img Cursor SetCursor Texture2D img Vector2 zero CursorMo
  • git:git diff old mode 100644 new mode 100755含义及解决方式

    参考 git diff old mode 100644 new mode 100755含义及解决方式 解决办法 git config add core filemode false 忽略就完事了
  • Python中编写与引入自己的包、模块

    其他关于Python的总结文章请访问 https blog csdn net qq 38962621 category 10299380 html 编写与引入自己的包 模块 模块 module Python中的任何 py 文件都可以称为一个
  • Spring4.0+Hibernate4.2.整合出现java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition

    1 异常 Exception in thread main org springframework beans factory BeanCreationException Error creating bean with name news
  • Air103

    目录 一 在线云编译 二 本地编译 Windows平台用户 如果是Air103 本机为 Air103 如果是Air105 本机为 Air105 定制固件里的库 编译 执行 生成过程及log文件解析 1 生成elf格式 2 按照设置文件设定的
  • python数据分析与可视化——第五章实训

    1 导入模块 import pandas as pd import numpy as np 2 获取数据 fdata pd read excel F 专业课程作业 python时空数据分析与可视化 tips mod xls fdata he
  • 安卓APP_ 布局(6) —— ConstrainLayout约束布局(重要)

    摘自 安卓APP 布局 6 ConstrainLayout约束布局 重要 作者 丶PURSUING 发布时间 2021 04 12 10 49 42 网址 https blog csdn net weixin 44742824 articl
  • B站粉丝数显示器代码解析学习

    代码来源B站 会飞的阿卡林https www bilibili com video BV14W41167tY 学习使用ESP8266的WIFI无线连接 在这里可以了解到SPI协议在Arduino中的使用 后来也使用ESP8266做了其他项目
  • 交换机与路由器技术-36-端口镜像

    目录 一 端口镜像 1 1 概述 1 2 目的 1 3 功能 1 4 端口镜像应用场景 1 4 1 本地端口镜像 SPAN 1 4 2 远程端口镜像 RSPAN 1 5 配置本地端口 1 6 配置远程端口镜像 RSPAN 一 端口镜像 1
  • Rabbitmq和kafka有什么区别?

    RabbitMQ和Kafka都是流行的消息队列系统 它们都可以用于构建分布式系统中的消息传递机制 虽然它们都可以用于相似的场景 但它们之间仍然存在一些重要的区别 一 数据处理方式不同 RabbitMQ是一个传统的AMQP消息队列 它使用队列
  • Java语言实现通讯录,联系人信息存在数据库里

    通讯录管理 问题描述 编写一个简单的通讯录管理程序 通讯录中需要存储姓名 地址 电话号码 邮政编码四项 还可以存储Email 家庭电话等信息 基本要求 程序应提供的基本管理功能有 1 添加 即增加一个人的记录到通信录中 2 显示 即在屏幕上
  • postman 将返回值设置为环境变量

    代码如下 var jsonData JSON parse responseBody pm globals set token jsonData data token
  • win2012 管理用户账号点滴

    1 c windows system32 config SAM 存储本地用户账号 2 cmd gt set 可以查看很多信息 包括logon server 3 创建一般服务账号的时候 要选择 密码永不过期 4 cmd gt net user
  • 【数据结构】线性表的顺序存储结构

    线性表 由n n 0 个数据元素 结点 a1 a2 an组成的有限序列 其中数据元素的个数n定义为表的长度 当n 0时称为空表 常常将非空的线性表 n gt 0 记作 a1 a2 an 这里的数据元素ai 1 i n 只是一个抽象的符号 其
  • DNS & bind详解

    文章目录 1 DNS基础知识 1 1 DNS的出现及演化 1 2 什么是DNS 1 3 域的分类 1 4 主机名 域名 FQDN 1 5 DNS解析流程 1 6 DNS分类 1 7 资源记录 2 DNS安装配置 2 1 安装DNS 2 2
  • 《C++ Primer》学习笔记(十六):模板与泛型编程

    C Primer 学习笔记 十六 模板与泛型编程 定义模板 函数模板 类模板 模板参数 控制实例化 模板实参推断 类型转换与模板类型参数 尾置返回类型与类型转换 模板实参推断和引用 转发 可变参数模板 模板特例化 定义模板 函数模板 tem
  • 简单记录我的第一个云服务器:华为云服务器

    一直想买个服务器用来瞎鼓捣 或者说把之前的一些乱七八糟的小项目部署到服务器给自己的 object 看 但是我也很无奈昂 一个菜鸡 临近毕业了说来就来 于是就买了个华为云服务器 毕竟在某地培训很是无聊 服务器如下 因为用的是linux系统 需
  • 越来越火的Serverless(无服务器计算),到底是个啥?

    今天这篇文章 我们来聊一个云计算领域的热门概念 Serverless 到底什么是Serverless 英语好的童鞋 可能一眼就看出来了 Serverless是由Server和less两个词根组成的词 从字面上理解 就是 无服务器 行业通常所
  • 【C++】类与类之间的 5 种关系

    文章目录 前沿 1 继承关系 2 关联关系 3 聚合关系 4 组合关系 5 依赖关系 6 比较五种关系 前沿 该文章就是简要的总结一下面向对象的 类与类之间的关系 熟悉类与类之间的关系 能够帮助我们更好的设计出合理的类 1 继承关系 继承关
  • Python进阶-----面向对象3.0(面对对象三大特征之---封装)

    目录 前言 什么是封装 Python私有化封装 习题 前言 上一期是讲解Python中类的私有属性和方法 其实很好理解 我给一个类中的部分属性进行加密拒绝访问 上一期链接Python进阶 面向对象2 0 特有属性和方法与私有属性和方法 Py