iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python私有函数,私有变量及封装的方法
  • 619
分享到

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

2023-06-29 11:06:09 619人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

这篇“python私有函数,私有变量及封装的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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私有函数,私有变量及封装的方法”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网Python频道。

--结束END--

本文标题: Python私有函数,私有变量及封装的方法

本文链接: https://www.lsjlt.com/news/324392.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Python私有函数,私有变量及封装的方法
    这篇“Python私有函数,私有变量及封装的方法”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python私有函数,私有变量...
    99+
    2023-06-29
  • Python学习之私有函数,私有变量及封装详解
    目录什么是私有函数和私有变量私有函数与私有变量的定义方法Python 中的封装面向对象编程小练习通过学习私有函数与私有变量,可以更好的完善 类的开发 ,从而丰满我们的场景与实现方案。...
    99+
    2024-04-02
  • python类的私有变量
    1.类的私有变量和私有方法 1)_xx 以单下划线开头的表示的是protected类型的变量。即保护类型只能允许其本身与子类进行访问。若内部变量标示,如:当使用“from Mimport”时,不会将以一个下划线开头的对象引入。 2)__xx...
    99+
    2023-01-31
    变量 python
  • Python 私有属性与私有方法
    目录1. 场景定义2. 语法定义3. 调用分析4. Python伪私有属性和私有方法1. 场景定义 私有属性: 是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的...
    99+
    2024-04-02
  • Python变量教程私有变量详解
    目录前言重整及其工作原理_单前导下划线__双前导下划线双前导和双尾下划线前言 Python 中,不存在只能在对象内部访问的“私有”实例变量。然而,大多数 Py...
    99+
    2024-04-02
  • 聊聊Python私有属性与私有方法
    1、 场景定义私有属性是指在 Python 的面向对象开发过程中,对象的某些属性只想在对象的内部被使用,但不想在外部被访问到这些属性。即:私有属性是对象不愿意公开的属性。私有方法是指在 Python 的面向对象开发过程中,对象的某些方法或者...
    99+
    2023-05-14
    Python 私有属性 私有方法
  • python私有变量的本质是什么
    小编给大家分享一下python私有变量的本质是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python是什么意思Python是一种跨平台的、具有解释性、编译...
    99+
    2023-06-14
  • python中的私有属性和私有方法是什么
    这篇文章给大家介绍python中的私有属性和私有方法是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。私有权限面向对象三大特性:封装、继承、多态封装的意义:将属性和方法放到一起做为一个整体,然后通过实例化对象来处理;...
    99+
    2023-06-14
  • python封装中私有成员指的是什么
    这篇文章将为大家详细讲解有关python封装中私有成员指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解决问题...
    99+
    2023-06-14
  • python封装函数的方法有哪些
    在Python中,封装函数有以下几种方法: 使用函数:将一段代码封装在一个函数中,通过调用函数来执行这段代码。函数可以接收参数,返...
    99+
    2023-10-23
    python
  • python基础知识之私有属性和私有方法
    私有权限 面向对象三大特性:封装、继承、多态 封装的意义: 将属性和方法放到一起做为一个整体,然后通过实例化对象来处理; 隐藏内部实现细节,只需要和对象及其属性和方法交互就...
    99+
    2024-04-02
  • Python类与方法的私有化
    1. 创建自己的类学习面向对象的第一步,就是创建一个类。因为类是面向对象的基石。Python类和其他编程语言(Java、C#等)的类差不多,也需要使用class关键字。下面通过一个实际的例子来看一下Python类是如何创建的。本例会创建一个...
    99+
    2023-01-31
    方法 Python
  • 如何在python中使用私有属性和私有方法
    本篇文章给大家分享的是有关如何在python中使用私有属性和私有方法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python的优点有哪些1、简单易用,与C/C++、Java、...
    99+
    2023-06-14
  • 改变C++中私有变量成员的值
    没有引用的情况: #include #include using namespace std;class Person{public: queueque;public: queue getQueue() { ...
    99+
    2023-09-08
    c++ 算法 开发语言
  • Java 对象中的数据私有化:封装的艺术
    私有数据成员 私有数据成员只能由包含它的类访问。通过使用私有修饰符(private),我们可以在类外部隐藏这些成员的访问。例如: private int age; 此代码将 age 变量声明为私有变量,这意味着它只能在包含它的类中访问。 ...
    99+
    2024-03-12
    引言 封装是面向对象编程(OOP)中的一项基本原则 它有助于维护代码的可读性、可维护性和安全性。通过将数据私有化 我们可以限制对数据的访问 从而提高代码的健壮性。
  • 如何访问python的私有成员函数
    访问python私有成员函数的方法class Plane():# 私有属性__air_sister = "20个"# 公有绑定方法def fly(self):print("飞机会飞")# 公有普通方法def fly2():print("飞机...
    99+
    2024-04-02
  • JavaScript中Class私有属性与私有方法的示例分析
    小编给大家分享一下JavaScript中Class私有属性与私有方法的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!pr...
    99+
    2024-04-02
  • C语言函数封装及变量的作用域
    目录1. for循环示例2. 模拟实现投票系统。switch3. 计算字符串空格、数字等数据数量4. 字符串转整数。5. 整数转字符串6. 浮点数转字符串7. 字符串转浮点数8. 函...
    99+
    2024-04-02
  • 私有属性/方法的访问
    在属性/方法名前有双下划线的,称为私有属性/方法,私有属性/方法外部不能直接访问, 一般访问类的私有属性,可以通过自身调用 使用了私有属性的公有方法 间接访问私有属性/方法, 但python中并没有真正意义的私有,可以通过 _类名__属性...
    99+
    2023-01-30
    属性 方法
  • python私有属性和方法怎么获取
    今天小编给大家分享一下python私有属性和方法怎么获取的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作