Python私有函数和专有方法

2023-05-16

  在任何语言中,都会规定某些对象(属性、方法、函数、类等)只能够在某个范围内访问,出了这个范围就不能访问了。这是“公”、“私”之分。此外,还会专门为某些特殊的东西指定一些特殊表示,比如类的名字就不能用class,def等,这就是保留字。除了保留字,python中还为类的名字做了某些特殊准备,就是“专有”的范畴。

私有函数

  在某些时候,会看到有一种方法命名比较特别,是以“__”双划线开头的,将这类命名的函数/方法称之为“私有函数”。

  所谓私有函数,就是:私有函数不可以从它们的模块外面被调用 私有类方法不能够从它们的类外面被调用 私有属性不能够从它们的类外面被访问 跟私有对应的,就是所谓的公有啦。有的编程语言用特殊的关键词来说明某函数或方法或类是私有还是公有。但是python仅仅用名字来说明,因为python深刻理解了2k年前孔先生丘所说的“名不正言不顺”的含义。

  如果一个python函数,类方法,或属性的名字以两个下划线开始 (但不是结束),它是私有的;其它所有的都是公有的。类方法或者是私有 (只能在它们自已的类中使用) 或者是公有 (任何地方都可使用)。

例如:


class Person:

    def __init__(self, name):
        self.name = name
        print(self.name)

    def __work(self, salary):
        print("%s salary is: %d" % (self.name, salary))


if __name__ == "__main__":
    officer = Person("Tom")
    officer.__work(1000)  

运行结果:


Tom
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/Myworld/work.py", line 13, in <module>
    officer.__work(1000)
AttributeError: 'Person' object has no attribute '__work'  

从运行结果中可以看出,当运行到officer.__work(1000)的时候,报错了。并且从报错信息中说,没有该方法。这说明,这个私有方法,无法在类外面调用(其实类外面可以调用私有方法,就是太麻烦,况且也不提倡)。

下面将上述代码进行修改,成为:


class Person:
    def __init__(self, name):
        self.name = name
        print(self.name)

    def __work(self, salary):
        print("%s salary is: %d" % (self.name, salary))

    def worker(self):
        self.__work(500)  # 在类内部调用私有方法


if __name__ == "__main__":
    officer = Person("Tom")  # Tom
    # officer.__work(1000)
    officer.worker()  # Tom salary is: 500  

结果正是要得到的。

专有方法

如果是以双划线开头,但不是以它结尾,所命名的方法是私有方法;

如果以双划线开头,并且以双划线结尾,所命名的方法就是专有方法。

比如__init__(),就是一个典型的专有方法。那么自己在写别的方法时,就不要用__开头和结尾了。虽然用了也大概没有什么影响,但是在可读性上就差很多了,一段程序如果可读性不好,用不了多长时间自己就看不懂了,更何况别人呢?

关于专有方法,出了__init__()之外,还有诸如:__str__,__setitem__等等,要想看,可以利用dir()函数在交互模式下看看某个函数里面的专有东西。

 

转载于:https://www.cnblogs.com/maplethefox/p/11615297.html

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

Python私有函数和专有方法 的相关文章

  • 【Linux基础】查看某一端口是否开放(1025为例)

    1 使用lsof 命令来查看端口是否开放 lsof i 1025 如果有显示说明已经开放了 xff0c 如果没有显示说明没有开放 lsof list open files 是一个列出当前系统打开文件的工具 在linux环境下 xff0c 任
  • Sublime Text 3下C/C++开发环境搭建

    Sublime Text 3下C C 43 43 开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text 1 Sublime Text 3安装 Ubuntu Linux Mint的软件管理器中已经能够
  • luogu p2651 添加括号Ⅲ

    题目描述 现在给出一个表达式 xff0c 形如a1 a2 a3 an 如果直接计算 xff0c 就是一个个除过去 xff0c 比如1 2 1 4 61 1 8 然而小A看到一个分数感觉很不舒服 xff0c 希望通过添加一些括号使其变成一个整
  • nigix的使用反向代理-负载均衡(2)

    原文参考 xff1a https blog csdn net zy1471162851 article details 91795712 tip nginx是一款高性能的http 服务器 反向代理服务器及电子邮件 xff08 IMAP PO
  • ubuntu系统下载

    cakao https blog csdn net kwame211 article details 83902851 官方下载地址 xff08 不推荐 xff09 https www ubuntu com download 中科大源 ht
  • Vivado中备份设计好的block design

    参考链接 https blog csdn net dimples song article details 81391615 前言 为了不每次都重新生成block design 避免重复劳动 可以使用直接复制原始工程的design bd块或
  • 完整记录一则Oracle 11.2.0.4单实例打PSU补丁的过程

    本文记录了打PSU的全过程 xff0c 意在体会数据库打PSU补丁的整个过程 1 OPatch替换为最新版本 2 数据库软件应用19121551补丁程序 3 数据库应用补丁 4 验证PSU补丁是否应用成功 1 OPatch替换为最新版本 o
  • 符号函数Sgn

    符号函数 目录 性质 功能 符号函数 定义 即数学上的Sgn 函数返回一个 整型变量 xff0c 指出参数的正负号 语法Sgn number xff0c number 参数是任何有效的数值表达式 返回值如果 number 大于0 xff0c
  • 把linux文件夹压缩成tar.gz的命令

    tar zcvf demo tar gz demo 把demo文件夹压缩成demo tar gz 转载于 https www cnblogs com jiqing9006 p 10893989 html
  • 逻辑回归(Logistic+Regression)经典实例

    机器学习算法完整版见fenghaootong github 房价预测 数据集描述 数据共有81个特征 SalePrice the property s sale price in dollars This is the target var
  • [转]redis服务器与客户端保活参数(tcp-keepalive)设置

    最近使用redis的list做跨进程的消息队列 xff0c 客户端使用的是redis cplusplus client 这个client库还是蛮好用的 xff0c 提供了和redis命令行一致的接口 xff0c 很方便 使用过程中发现下面一
  • debian 安装curl 很简单的一步完成

    在linux中打开网页肯定要用到curl命令 xff0c 但是看网上好多linux安装curl包的博客 xff0c 很麻烦 xff0c 而且运行到最后还出错了 xff0c 最后找到一个apt get 命令 xff0c 一句话搞定了 xff0
  • excel概率密度函数公式_正态分布基本概念及Excel实现

    正态分布 也称为高斯分布 是统计中最常用的连续分布 正态分布在统计中至关重要 xff0c 主要有以下三个原因 xff1a 商业中常见的许多连续变量的分布与正态分布非常相似 正态分布可用于近似各种离散的概率分布 由于正态分布与中心极限定理之间
  • python日期比较_python 时间比较方法总结

    1 xff0c 最近发现 xff0c python的datetime可以直接运用比较运算符进行大小比较 首先定义一组9月份日期数组 from datetime import datetime targets 61 9 1到9 30的日期数据
  • container java_Java容器(container)

    Java容器 container 容器可以管理对象的生命周期 对象与对象之间的依赖关系 xff0c 您可以使用一个配置文件 通常是XML xff0c 在上面定义好对象的名称 如何产生 Prototype 方式或Singleton 方式 哪个
  • matlab安装c盘吗,Matlab安装时的三种错误及其解决办法

    Matlab7 0安装时出现的错误主要分为三种 xff1a 安装前 安装中和安装后 1 安装前 当我们下载好Matlab7 0 http pan baidu com s 1o6BpcsM 安装包并解压后 xff0c 解压缩后里面有一个后缀名
  • 威联通如何备份文件服务器上,威联通NAS HBS 3套件,数据自动备份、同步教程...

    一 什么是 HBS 3 HBS 3 是 Hybrid Backup sync 3 的缩写 xff0c 意为混合型备份与同步中心 xff0c 主要是将数据备份 复原 同步等功能整合到单一 QTS 应用中 xff0c 让您可轻松将 QNAP N
  • 文件远程共享服务器上,远程文件共享服务器

    远程文件共享服务器 内容精选 换一换 文件系统创建完成后 xff0c 用户需在客户端挂载文件共享 xff0c 在本地共享目录和CSG的文件共享建立映射 xff0c 通过操作本地的目录实现对CSG共享目录的操作 xff0c 实现数据实时上云管
  • Jpeg交叉编译

    嵌入式开发 Jpeglib交叉编译 环境 下载源码 交叉编译 相关文件 问题 Jpeglib交叉编译 环境 环境与上一篇相同 上一篇只是简单实现了一个demo 后面需要将完整功能编译成库文件 因为用到libjpeg库 所以先要将jpeg库进
  • 华为服务器显示红色的心跳,客户端服务器心跳

    客户端服务器心跳 内容精选 换一换 由于主机中 etc ssh sshd config 配置文件中对服务器与客户端交互的活动心跳时间做出了限制 xff0c 所以在一个ansible任务中如果在 规定时间 中主机没有任何响应则ssh服务断开

随机推荐