如何保持变量和包含它的字典一致?

2024-01-22

我有一个变量

self.foo = 1

还有一本字典

self.foo_dict = {
    'foo_key' = self.foo
}

我希望能够改变self.foo并让它也改变self.foo_dict。如果这是在 C 中(并且字典是一个结构),我只会使用指针。

有什么建议么?这在 Python 中可能吗?


不需要包装类!
就做self.foo访问字典中的值的属性:

class Bar:
    def __init__(self, foo_):
        self.foo_dict = {}  
        self.foo = foo_

    @property
    def foo(self):
        return self.foo_dict["foo_key"]

    @foo.setter
    def foo(self, value):
        self.foo_dict["foo_key"] = value

    def show(self):
        print("foo={} ; foo_dict['foo_key']={}".format(
                        self.foo, self.foo_dict["foo_key"]))

b = Bar(1)
b.show()
b.foo = 2
b.show()
b.foo_dict["foo_key"] = 3
b.show()

查看此代码在 ideone.com 上运行 http://ideone.com/GXAbNl

属性从外部看起来就像普通的实例成员字段,但它们实际上是可以执行任何操作的自定义函数。这样两人foo(...)方法被调用时foo属性被访问。装饰有@property是吸气剂和装饰者@PROPERTYNAME.setter显然是二传手。您还可以通过简单地省略属性方法之一来限制对该属性的读或写访问。

在这里,他们将所有操作重定向到字典。这样一来,您就拥有一个简单可变变量的一个实例,但可以通过多种方式访问​​它。

上面的示例将产生以下输出:

foo=1 ; foo_dict['foo_key']=1
foo=2 ; foo_dict['foo_key']=2
foo=3 ; foo_dict['foo_key']=3

正如我们所看到的,无论我们更改字典中的值还是通过属性更改值,两个名称始终都指向同一个变量。

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

如何保持变量和包含它的字典一致? 的相关文章

  • 将 csv 文件按多列拆分为 panda 数据框

    我有一个包含多列的 tsv 文件 有 10 多列 但对我来说重要的列是名称为 user name shift id url id 的列 我想创建一个数据框 首先根据用户名分隔整个 csv 文件 即只有具有相同用户名的行才会分组在一起 从该块
  • 在 Mac OS 10.14.2 上的 Python 3.7 中安装 JPype1 时出错

    我在系统中安装 JPype1 时遇到错误 我正在使用Python 3 7 JPype1 是 Jaydebeapi 的依赖项 pip install Jpype1 以下是错误消息 Collecting jpype1 Using cached
  • Pandas:根据其他多级列对最里面的列进行分组排序

    考虑下面的 df In 3771 df pd DataFrame A a 11 B b 11 C C1 C1 C2 C1 C3 C3 C2 C3 C3 C2 C2 D D1 D2 D1 D3 D3 D2 D4 D4 D1 D2 D3 E v
  • Plotly - 不同颜色的表面

    我正在尝试在 Plotly for Python 中绘制多个曲面 每个曲面具有不同的颜色 具体来说 表面显示了在相空间中不同点采取行动的预测奖励函数 由于我在每个点都有多个可能的操作 因此每个点都是不同的表面 我想对每个表面进行独特的着色
  • python 3+ 的缓冲函数

    我试图使用 vtk show 打开一个 vtk 窗口 但是每次我这样做时 我的 Ipython 控制台都会崩溃 显然这是因为 Ipython 无法显示外部窗口 而这正是 vtk show 所做的 我在谷歌上搜索了一个解决方案 但它是为 py
  • 需要根据数据框中的行号应用不同的公式

    我正在努力在数据框中找到某种移动平均值 该公式将根据正在计算的行数而变化 实际场景是我需要计算Z列 Edit 2 以下是我正在使用的实际数据 Date Open High Low Close 0 01 01 2018 1763 95 176
  • 在 Python 中延迟转置列表

    所以 我有一个延迟生成的可迭代的三元组 我试图弄清楚如何将其转换为 3 个可迭代对象 分别由元组的第一个 第二个和第三个元素组成 然而 我希望这件事能懒惰地完成 所以 举例来说 我希望 1 2 3 4 5 6 7 8 9 将变成 1 4 7
  • 如何在类型提示中定义元组或列表的大小

    有没有办法在参数的类型提示中定义元组或列表的大小 目前我正在使用这样的东西 from typing import List Optional Tuple def function name self list1 List Class1 if
  • Python 3 - 如何告诉 pipelinev 使用 python 3 而不是 python 2?

    我正在尝试使用 requests 模块 这是我的安装方式 ec2 user ip xxx xx xx xxx newslookup pipenv install requests Creating a virtualenv for this
  • 将海龟模块与 tkinter 画布集成[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我正在尝试将 Turtle 模块集成到我用 TKInter 创建的界面中 目前我有一个画布 我希望乌龟可以在其中绘制 参
  • 如何将经度和纬度转换为国家或城市?

    我需要将经度和纬度坐标转换为国家或城市 python中有这样的例子吗 提前致谢 我使用谷歌的API from urllib2 import urlopen import json def getplace lat lon url http
  • 在 pyhf 中针对小信号模型拟合收敛失败

    这是我们 pyhf 开发团队 最近提出的一个问题 认为很好并且值得分享 因此我们在这里发布了它的修改版本 我正在尝试做一个简单的假设检验pyhf v0 4 0 https pypi org project pyhf 0 4 0 我使用的模型
  • 在 Python Dataframe 中对附近的列值进行分组

    我有一个 DataFrame 其中包含一些列 例如 n 列 和一些行 例如 m 行 我想根据一列 列 x 值对 DataFrame 行进行分组 它与列 x 值不完全匹配 我需要将附近的值分组 例如我的 DataFrame 会是这样的 y y
  • 如何使用 python http.server 运行 CGI“hello world”

    我使用的是 Windows 7 和 Python 3 4 3 我想在浏览器中运行这个简单的 helloworld py 文件 print Content Type text html print print print print h2 H
  • Matplotlib:检查空图

    我有一个循环加载并绘制一些数据 如下所示 import os import numpy as np import matplotlib pyplot as plt for filename in filenames plt figure i
  • Keras Model.fit 详细格式

    我在 Jupyter Notebook 中运行 Keras model fit 如果 verbose 设置为 1 输出会非常混乱 Train on 6400 samples validate on 800 samples Epoch 1 2
  • 即使安装了 Microsoft Visual C++ 14.0 也出现 Pip 错误

    我阅读了之前相关或询问的所有问题和答案 但仍然没有找到适合我的问题的答案 我正在使用 python 3 6 5 并且 pip 和 setuptools 是最新的 我从这里安装了 Microsoft Visual C Redistributa
  • Python int和float在64位系统中的内存消耗

    我正在 Python 3 4 的 64 位系统中尝试以下代码 以了解不同原始数据类型的内存消耗 import sys print sys getsizeof 45 prints 28 print sys getsizeof 45 2 pri
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • ModuleNotFoundError:没有名为“googleapiclient”的模块

    如果这是一个愚蠢的问题 我深表歉意 我在 stackoverflow 上搜索过 但没有找到解决办法 我正在致力于从 Python 2 7 迁移到 Python 3 8 我收到一个程序的以下错误 请帮我 Traceback most rece

随机推荐