Python 3 中真正的私有变量

2023-12-19

所以我知道如何在 python 中使变量“私有”,如下所示:

class Foo:
    def __init__(self):
        self.__private = 'bar'

这“有效”,但无效,如下所示:

foo = Foo()
'__private' in vars(foo) #False
'_Foo__private' in vars(foo) #True

现在,我明白这是在 python 中创建私有变量的方法I like这边走。它允许您修改名称,这样子类就不会意外地覆盖它(因为它以类的名称开头),并且没有人会意外地使用它。它还使您能够更改私有变量如果你知道自己在做什么。而且,这是最好的方法,因为真正的私有变量是不可能的。

或者说我是这么想的。

最近,我在读PEP 8 https://www.python.org/dev/peps/pep-0008/我看到了这一行:

我们在这里不使用术语“私有”,因为在 Python 中没有属性是真正私有的(通常没有不必要的工作量)。

这段引用可以在PEP 8 的“继承”部分的设计 https://www.python.org/dev/peps/pep-0008/#designing-for-inheritance.

请注意“没有通常不必要的工作量”这句话。我现在确信有must是在 python 中获取真正私有变量的一种方法。我该怎么做呢?

我尝试过覆盖__getattribute__,但问题是没有办法判断调用是否来自类内部(据我所知)。

另外,__dict__尝试执行此操作时,属性很烦人,因为它保存对所有实例变量的引用。

我也想到了元类,但那些似乎有同样的问题__getattribute__.

想法?


Note:我知道任何在 python 中创建真正私有变量的方法都应该never在生产代码中完成。我只是想知道如何could做完了。


我尝试过覆盖获取属性,但问题是没有办法判断调用是否来自类内部(据我所知)。

您可以使用inspectmodule 来查找调用函数的名称和模块,您可以将其与白名单进行比较。

But inspect也有getattr_static,它可以绕过任何__getattribute__.


Python 中没有什么是真正私有的。有一些方法可以让访问变得困难,但总有办法绕过这些方法。

那么唯一的解决方案是在当前的 Python 解释器之外。您可以使用其他更安全的语言的外部函数接口,或者对相同或在子进程中运行的另一个Python解释器进行远程过程调用(例如xmlrpc),甚至可以以具有不同权限的不同用户身份运行。私有变量和所有允许访问它的函数将位于当前解释器之外。那么就没办法检查了。

这类特权分离 https://en.wikipedia.org/wiki/Privilege_separation甚至是其中之一规定的用例 https://pyro4.readthedocs.io/en/stable/intro.html#what-can-you-use-pyro-for用于 Pyro RPC 库。

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

Python 3 中真正的私有变量 的相关文章

  • Python 中的 Lanczos 插值与 2D 图像

    我尝试重新缩放 2D 图像 灰度 图像大小为 256x256 所需输出为 224x224 像素值范围从 0 到 1300 我尝试了两种使用 Lanczos 插值来重新调整它们的方法 首先使用PIL图像 import numpy as np
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 从字符串中删除识别的日期

    作为输入 我有几个包含不同格式日期的字符串 例如 彼得在16 45 我的生日是1990年7月8日 On 7 月 11 日星期六我会回家 I use dateutil parser parse识别字符串中的日期 在下一步中 我想从字符串中删除
  • 如何使用 Ansible playbook 中的 service_facts 模块检查服务是否存在且未安装在服务器中?

    我用过service facts检查服务是否正在运行并启用 在某些服务器中 未安装特定的软件包 现在 我如何知道这个特定的软件包没有安装在该特定的服务器上service facts module 在 Ansible 剧本中 它显示以下错误
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • Spark KMeans 无法处理大数据吗?

    KMeans 有几个参数training http spark apache org docs latest api python pyspark mllib html highlight kmeans pyspark mllib clus
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 向后台进程发送信号

    我应该向后台进程发送哪个信号以将其移至前台 SIGTTIN SIGTOU 还是 它不是直接控制作业是前台还是后台的信号 这些作业 通常 处于 shell 的控制之下 例如 在bash 如果执行 pax gt sleep 3600 pax g
  • Kubernetes Horizo​​ntal Pod Autoscaler 中的 Pod 副本缩减是如何工作的?

    我的理解是 在 Kubernetes 中 使用 Horizo ntal Pod Autoscaler 时 如果targetCPUUtilizationPercentage字段设置为 50 并且所有 Pod 副本的平均 CPU 利用率高于该值
  • UIAlertController 'UIAlertAction' 标签/用户数据或 Swift 中的任何内容

    在我的 iOS 操作表中 我显示了 JSON 字典中的名称 Name Doctor for Disease AAA Doctor id 21 Name Doctor for Disease BBB Doctor id 22 Name Doc
  • 即使 INSERT IGNORE 忽略插入也会锁定表吗?

    在 MySQL 中 如果我有一个 INSERT IGNORE 命令 由于唯一性约束 该命令最终不会插入到表中 它是否询问并等待写锁 或者MySQL是否识别IGNORE关键字 并在写锁之前使用读锁 并且只有当它确实需要写时才请求写锁 这取决于
  • 在jquery中将文本框设置为只读并将背景颜色设置为灰色

    再会 我想在我的中创建一个文本框jsp成为readonly其背景颜色为灰色disable在 Jquery 中 以下是我的代码 if a billAccountNumber attr readonly true 我不喜欢使用attr disa
  • 服务在 SQL Server 配置管理器中不可见

    我已经安装了 SQL Server 2008 Management Studio Express 32 位 我已成功安装它 但当我尝试连接 SQL Server 时出现错误 然后我想从 SQL Server 配置管理器打开服务 但我看不到任
  • 将函数传递给子例程时,虚拟过程“f”中的接口不匹配

    我正在尝试编写一个具有两个参数的子例程 用于最小化 数组x任意长度 一个函数f接受该长度的数组并返回一个标量 示例模块 module foo contains subroutine solve x f real dimension inte
  • 如何通过 iPhone 上的网页检查应用程序是否已安装

    我想创建一个网页 一个将 iPhone 重定向到应用商店 https en wikipedia org wiki App Store 28iOS 29如果 iPhone 没有安装该应用程序 但如果 iPhone 安装了该应用程序 我希望它打
  • 在面板内的控件顶部绘图 (C# WinForms)

    我知道这个问题已经被问过多次 但到目前为止我还没有找到一个好的解决方案 我有一个带有其他控件的面板 我想在它上面以及面板中所有控件的顶部画一条线 我遇到了 3 种解决方案 它们都没有按照我想要的方式工作 获取桌面 DC 并在屏幕上绘制 如果
  • chm hhk 中的关键字标签

    我目前正在检查 CHM 的二进制索引构建 但我注意到示例项目中的一些 hhk 例如生成的 Sphinx 有一个 关键字 标签 该标签似乎没有记录在chmspec http www nongnu org chmspec latest Site
  • 有没有办法通过反射获取类型的别名?

    我正在编写一个简单的代码生成应用程序来从 DB2 数据库模式构建 POCO 我知道这并不重要 但我更喜欢使用类型别名而不是实际的系统类型名称 如果可用 即 int 而不是 Int32 有没有一种方法可以使用反射来获取类型的别名而不是实际类型
  • 在 VS 中以编程方式打开解决方案时,如何才能将文件添加到最近项目的 MRU 列表中?

    当使用以下方式在加载项 扩展 在我的例子中为 VS2012 中以编程方式打开解决方案时解决方案 打开 http msdn microsoft com en us library vstudio envdte solution open as
  • 如何在 Python 中进行相对导入?

    想象一下这个目录结构 app init py sub1 init py mod1 py sub2 init py mod2 py 我正在编码mod1 我需要从中导入一些东西mod2 我该怎么做呢 I tried from sub2 impo
  • TFS 迭代积压仅显示用户故事而不是任务

    在使用敏捷流程模板的 TFS 2015 中 board对于 故事 待办事项列表仅显示故事 当前迭代的面板显示故事下的所有任务 这对于大多数团队来说都是有意义的 我们正在将我们的工作分解成比平常更小的故事 因此避免任务崩溃 https www
  • python 尝试一下 except

    我的问题很简单 我有一个try except代码 在尝试中 我进行了一些http请求尝试 在例外中 我有几种方法来处理我遇到的异常 现在我想在我的代码中添加一个时间参数 这意味着尝试只会持续 n 秒 否则用 except 捕获它 用自由语言
  • 如何在.NET 6库中引用ASP.NET Core 6类型?

    我正在为我的组织开发内部图书馆 我需要引用通常 属于 网络应用程序的某些类型 例如 提供一些扩展 WebApplicationOptions HttpContext 如果我使用
  • Python 偏导数简单

    我对用 Python 计算偏导数感兴趣 我见过计算单变量函数导数的函数 但没有见过其他函数 找到具有以下功能的东西就太好了 f x y z 4xy xsin z x 3 z 8y part deriv function f variable
  • Mercurial如何检索执行hg推送的真实用户

    在服务器站点上 hg tip显示执行 hg Push commit 的用户 数据取自 hgrc 的 user 部分 我可以把我喜欢的任何东西放在那里 但如何在服务器上了解真正这样做的人hg push 你需要维护一个pushlog手动跟踪这一
  • 在 Javascript 中将图像转换为二进制数据或字符串

    我正在使用 Chrome Extension 上的 XMLHttp Request 将图像文件上传到 TWITPIC 我需要将图像作为有效负载发送 有没有办法做到这一点 我找到了这个链接在javascript中将图像转换为二进制数据 htt
  • Python 3 中真正的私有变量

    所以我知道如何在 python 中使变量 私有 如下所示 class Foo def init self self private bar 这 有效 但无效 如下所示 foo Foo private in vars foo False Fo