我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python私有函数,私有变量及封装的方法

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python私有函数,私有变量及封装的方法

这篇“Python私有函数,私有变量及封装的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python私有函数,私有变量及封装的方法”文章吧。

什么是私有函数和私有变量

私有函数与私有变量中的私有是什么意思? —> 简单理解就是独自拥有、不公开、不分享的意思。放到函数与变量中就是独自拥有的函数与独自拥有的变量,并且不公开。这样我们就理解了什么是私有函数与私有变量。

  • 无法被实例化后的对象调用的类中的函数与变量

  • 虽然无法被实例化后的对象调用,但是在 类的内部我们可以 调用私有函数与私有变量

  • 私有函数与私有变量的目的:只希望类内部的业务调用使用,不希望被实例化对象调用使用

  • 既然有私有函数与私有变量,其实能被实例化对象调用的函数与变量就是公有函数与公有变量,不过一般我们都称之为函数与变量。

私有函数与私有变量的定义方法

如何定义私有函数与私有变量:在 类变量 与 类函数 前添加 __ (2个下横线)即可定义私有函数与私有变量;变量或函数的后面无需添加,左右都有两个下横线,是 类的内置函数 的定义规范。

私有函数与私有变量示例如下:

class Persion(object):        def __init__(self):        self.name = name        self.__age = 18                    # 'self.__age' 为 Persion类 私有变量            def run(self):        print(self.name, self.__age)    # 在  Persion类 的代码块中,私有变量依然可以被调用            def __eat(self):                    # '__eat(self)' 为 Persion类 私有函数        return 'I want eat some fruits'

接下来我们根据上面的示例代码做一下修改,更好的演示一下 私有函数与私有变量 方便加深理解

class PersionInfo(object):    def __init__(self, name):        self.name = name    def eat(self):        result = self.__eat()        print(result)    def __eat(self):        return f'{self.name} 最喜欢吃水果是 \'榴莲\' 和 \'番石榴\''    def run(self):        result = self.__run()        print(result)    def __run(self):        return f'{self.name} 最喜欢的健身方式是 \'跑步\' 和 \'游泳\''persion = PersionInfo(name='Neo')persion.eat()persion.run()# >>> 执行结果如下:# >>> Neo 最喜欢吃水果是 '榴莲' 和 '番石榴'# >>> Neo 最喜欢的健身方式是 '跑步' 和 '游泳'

我们再试一下 通过 实例化对象 persion 调用 __eat 私有函数试试

class PersionInfo(object):    def __init__(self, name):        self.name = name    def eat(self):        result = self.__eat()        print(result)    def __eat(self):        return f'{self.name} 最喜欢吃水果是 \'榴莲\' 和 \'番石榴\''    def run(self):        result = self.__run()        print(result)    def __run(self):        return f'{self.name} 最喜欢的健身方式是 \'跑步\' 和 \'游泳\''persion = PersionInfo(name='Neo')persion.__eat()# >>> 执行结果如下:# >>> AttributeError: 'PersionInfo' object has no attribute '__eat'# >>> 再一次证明 实例化对象是不可以调用私有函数的

那么事实真的是 实例化对象就没有办法调用 私有函数 了么?其实不是的,我们继续往下看

class PersionInfo(object):    def __init__(self, name):        self.name = name    def eat(self):        result = self.__eat()        print(result)    def __eat(self):        return f'{self.name} 最喜欢吃水果是 \'榴莲\' 和 \'番石榴\''    def run(self):        result = self.__run()        print(result)    def __run(self):        return f'{self.name} 最喜欢的健身方式是 \'跑步\' 和 \'游泳\''persion = PersionInfo(name='Neo')# 通过 dir() 函数 查看一下 实例化对象 persion 中都有哪些函数?print(dir(persion))

Python私有函数,私有变量及封装的方法

可以看到 实例化对象 persion 也有两个私有变量 _Persion__eat 和 _Persion__run ,尝试直接用实例化对象 persion 调用私有变量。

class PersionInfo(object):    def __init__(self, name):        self.name = name    def eat(self):        result = self.__eat()        print(result)    def __eat(self):        return f'{self.name} 最喜欢吃水果是 \'榴莲\' 和 \'番石榴\''    def run(self):        result = self.__run()        print(result)    def __run(self):        return f'{self.name} 最喜欢的健身方式是 \'跑步\' 和 \'游泳\''persion = PersionInfo(name='Neo')# 通过 dir() 函数 查看一下 实例化对象 persion 中都有哪些函数?print(dir(persion))print(persion._PersionInfo__eat())print(persion._PersionInfo__run())# >>> 执行结果如下图:

Python私有函数,私有变量及封装的方法

可以看到通过这种方式,我们的 实例化对象 persion 也成功的调用了 PersionInfo 类 的私有函数;但是既然是 私有函数 ,那么目的就是不希望被实例化对象调用,所以我们还是按照编码规范来使用比较好。

附:私有变量(私有属性)的使用与私有函数一样,我们看下面的示例

class PersionInfo(object):    __car = 'BMW'    def __init__(self, name, sex):        self.name = name        self.__sex = sex    def info(self):        result = self.__info()        print(result)    def __info(self):        return f'{self.name} 性别:{self.__sex} ,他有一辆:\'{self.__car}\''persion = PersionInfo(name='Neo', sex='男')persion.info()# >>> 执行结果如下:# >>> Neo 性别:男 ,他有一辆:'BMW'# >>> 尝试调用私有函数私有函数与变量(属性)['_PersionInfo_01__car', '_PersionInfo_01__info', '_PersionInfo_01__sex']print(persion01._PersionInfo_01__info())# >>> 执行结果如下:# >>> Neo 性别:男 ,他有一辆:'BMW'

Python 中的封装

其实 Python 中并没有 封装 这个功能,而封装只是针对 Python 中某种业务场景的一种概念而已。

封装的概念 —> 将不对外的私有属性或方法通过可以对外使用的函数而使用(类中定义的私有函数、私有方法只能在类的内部使用,外部无法访问),这样做的主要原因是:保护隐私,明确的区分内与外。

封装的示例如下:

class Persion(object):        def __hello(self, data):        print('hello %s' % data)            def helloworld(self):        self.__hello('world')                if __name__ == '__main__'persion = Persion()    persion.helloworld()    # >>> 执行结果如下:# >>> hello world# >>> 我们可以看到 helloworld() 是基于 私有函数 __hello() 来执行的;# >>> 所以我们是通过对外的函数 helloworld() 调用了内部私有函数 __hello   ;  这就是 Python 中的 封装的概念。

面向对象编程小练习

需求:

用类和对象实现银行账户的资金交易管理,包括存款、取款和打印交易详情,交易详情中包含每次交易的时间、存款或者取款的金额、每次交易后的余额。

脚本示例如下:

#coding: utf-8import timeclass MoneyExchange(object):    money = 0    abstract = []    single_bill_list = []    bill_list =[]    transcation_num = 0    currency_type = "人民币"    service_option_num = []    service_option = []    service_menu ={        1: "1:存款",        2: "2:取款",        3: "3:查看明细",        4: "4:查看余额",        0: "0:退出系统"    }    for key, value in service_menu.items():        service_option_num.append(key)        service_option.append(value)    def welcome_menu(self):        print('*' * 20 + '欢迎使用资金交易管理系统' + '*' * 20)        for i in range(0,len(self.service_option)):            print(self.service_option[i])        print('*' * 60)    def save_money(self):        self.money_to_be_save = float(input('请输入存钱金额:'))        self.abstract = '转入'        self.time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())        self.money += self.money_to_be_save        self.single_bill_list.append(self.time)        self.single_bill_list.append(self.abstract)        self.single_bill_list.append(self.money_to_be_save)        self.single_bill_list.append(self.currency_type)        self.single_bill_list.append(self.money)        self.bill_list.append(self.single_bill_list)        self.single_bill_list = []        self.transcation_num += 1        print('已成功存入!当前余额为:%s 元' % self.money)        input('请点击任意键以继续...')    def withdraw_money(self):        self.money_to_be_withdraw = float(input('请输入取出金额:'))        if self.money_to_be_withdraw <= self.money:            self.abstract = '取出'            self.time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())            self.money -= self.money_to_be_withdraw            self.single_bill_list.append(self.time)            self.single_bill_list.append(self.abstract)            self.single_bill_list.append(self.money_to_be_withdraw)            self.single_bill_list.append(self.currency_type)            self.single_bill_list.append(self.money)            self.bill_list.append(self.single_bill_list)            self.single_bill_list = []            self.transcation_num += 1            print('已成功取出!当前余额为:%s 元' % self.money)            input('请点击任意键以继续...')        else:            print('您输入的取出金额超过余额,无法操作!请重新输入')            input('请点击任意键以继续...')    def check_bill_list(self):        print('|      交易日期      |  摘要  |  金额  |  币种  |  余额  |')        for i in range(0, self.transcation_num):            print("|%s | %s | %s | %s | %s|" % (                self.bill_list[i][0],                self.bill_list[i][1],                self.bill_list[i][2],                self.bill_list[i][3],                self.bill_list[i][4]            ))        input('请点击任意键以继续...')    def check_money(self):        print('账户余额为:%s元' % self.money)        input('请点击任意键以继续...')    def user_input(self):        option = float(input('请输入选项:'))        if option in self.service_option_num:            if option == 1:                self.save_money()            if option == 2:                self.withdraw_money()            if option == 3:                self.check_bill_list()            if option == 4:                self.check_money()            if option == 0:                print('您已成功退出,谢谢!')                exit()        else:            print('抱歉,你输入有误,请重新输入!')            input('请点击任意键以继续...')            money_exchange = MoneyExchange()while True:    money_exchange.welcome_menu()    money_exchange.user_input()    # >>> 执行结果如下:# >>> ********************欢迎使用资金交易管理系统********************# >>> 1:申请存款# >>> 2:申请取款# >>> 3:查看明细# >>> 4:查看余额# >>> 0:退出系统# >>> ************************************************************# >>> 根据提示执行对应的操作

以上就是关于“Python私有函数,私有变量及封装的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python私有函数,私有变量及封装的方法

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python私有函数,私有变量及封装的方法

这篇“Python私有函数,私有变量及封装的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python私有函数,私有变量
2023-06-29

python中私有函数调用方法解密

本文实例讲述了python中私有函数调用方法。分享给大家供大家参考,具体如下: 与大多数语言一样,Python 也有私有的概念: ① 私有函数不可以从它们的模块外面被调用 ② 私有类方法不能够从它们的类外面被调用 ③ 私有属性不能够从它们的
2022-06-04

python封装函数的方法有哪些

在Python中,封装函数有以下几种方法:使用函数:将一段代码封装在一个函数中,通过调用函数来执行这段代码。函数可以接收参数,返回结果。这是最基本的封装函数的方法。示例:def add(a, b):return a + bresult =
2023-10-23

python数据类型和变量的使用方法有哪些

本篇内容主要讲解“python数据类型和变量的使用方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python数据类型和变量的使用方法有哪些”吧!数据类型计算机顾名思义就是可以做数学计算
2023-06-02

smarty模板的数据变量有哪些以及调用方法是什么

本篇内容主要讲解“smarty模板的数据变量有哪些以及调用方法是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“smarty模板的数据变量有哪些以及调用方法是什么”吧! 定义:模板变量,即在模
2023-06-07

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录