更改多个 Python 实例中的变量

2023-11-27

是否可以同时设置类的所有实例的变量?我有一个简化的例子如下:

class Object():
   def __init__(self):
       self.speed=0

instance0=Object()
instance1=Object()
instance2=Object()

#Object.speed=5 doesn't work of course

我可以看到,通过将所有新实例添加到列表中并使用 isinstance() 进行迭代是可能的,但这并不可取。


正如其他答案所说,一种更简单的方法是将您的属性始终保留为类属性。如果它是在类主体上设置的,并且对该属性的所有写访问都是通过类名而不是实例进行的,则可以:

>>> class Object(object):
...     speed = 0
... 
>>> a = Object()
>>> b = Object()
>>> c = Object()
>>> 
>>> Object.speed = 5
>>> print a.speed
5
>>> 

但是,如果您以这种方式在单个实例中设置属性,则该实例将拥有自己的属性,并且它将不再与其他实例的属性一起更改:

>>> a.speed = 10
>>> Object.speed = 20
>>> print b.speed
20
>>> print a.speed
10
>>>

为了克服这个问题,以便每当在任何实例中设置属性时,类属性本身都会发生更改,更简单的方法是将对象作为属性 - 其设置器设置类属性:

class Object(object):
  _speed = 0
  @property
  def speed(self):
     return self.__class__._speed
  @speed.setter
  def speed(self, value):
     self.__class__._speed = value

哪个有效:

>>> 
>>> a = Object()
>>> b = Object()
>>> a.speed, b.speed
(0, 0)
>>> a.speed = 10
>>> a.speed, b.speed
(10, 10)

如果您想在实例上拥有独立的属性,但需要一个特殊的“set_all”方法来在所有实例中设置该属性,那么方法是使用标准 librayr 中的 gc(垃圾收集器)模块来查找并循环该类的所有实例,并设置它们的实例属性:

import gc

class Object(object):
    def __init__(self):
        self.speed = 0
        
    def set_all_speed(self, value):
        for instance in (obj for obj in gc.get_referrers(self.__class__):
            if isinstance(obj, self.__class__)):
                instance.speed = value

结果是:

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

更改多个 Python 实例中的变量 的相关文章

  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将数据从 python pandas 数据框导出或写入 MS Access 表

    我正在尝试将数据从 python pandas 数据框导出到现有的 MS Access 表 我想用已更新的数据替换 MS Access 表 在 python 中 我尝试使用 pandas to sql 但收到错误消息 我觉得很奇怪 使用 p
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何从网页中嵌入的 Tableau 图表中抓取工具提示值

    我试图弄清楚是否有一种方法以及如何使用 python 从网页中的 Tableau 嵌入图形中抓取工具提示值 以下是当用户将鼠标悬停在条形上时带有工具提示的图表示例 我从要从中抓取的原始网页中获取了此网址 https covid19 colo
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 添加不同形状的 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
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 如何在 Python 中追加到 JSON 文件?

    我有一个 JSON 文件 其中包含 67790 1 kwh 319 4 现在我创建一个字典a dict我需要将其附加到 JSON 文件中 我尝试了这段代码 with open DATA FILENAME a as f json obj js
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • 在 Eclipse 中调试 Android 应用程序时,无法看到匿名类中的最终变量内容

    在调试 Eclipse 中时 如果变量是在匿名类外部定义的 但调试是在匿名类内部 则我无法在变量视图 表达式视图和显示视图中看到变量内容 当我尝试在调试中查看内容时 出现错误 x 无法解析为变量 在以下示例中 x 无法解析 private
  • 使用 PHP 去除 HTML 注释但保留条件

    我目前正在使用 PHP 和正则表达式来删除页面中的所有 HTML 注释 剧本运作良好 有点太好了 它删除了所有评论 包括我在 这是我所得到的 HTML source goes here 由于我的正则表达式不太热 我在尝试找出如何修改模式以排
  • 在Python中对具有3个元素的元组列表进行排序

    我有一些元组的列表 每个元组都有三个元素 我需要对列表进行排序 为了打破两个元组之间的联系 首先查找元组的第一个元素 如果仍然联系则查找第二个元素 列表如下 L 1 14 0 14 1 1 1 14 2 14 2 3 2 4 4 4 11
  • 更改 python 解释器窗口

    我有两个 python 安装 2 5 和 2 6 我想将默认的 python 解释器从 2 5 更改为 2 6 有人知道怎么做吗 PYTHONPATH 是NOT你在寻找什么 这是为了改变 Python 的 导入 查找包和模块的位置 您需要更
  • pyodbc 不会引发 SQL Server 错误

    我正在尝试使用pyodbc 使用 Python 2 7 调用存储过程将记录插入 SQL Server 2012 表中 我正在路过一张临时桌子 我转储了我的 sql 当通过 SQL Server 管理控制台执行时 它生成了以下外键错误 Msg
  • 删除所有以前版本的 python

    我有一些经验C and Fortran 我想开始使用python对于我的后处理 因为我开始意识到效率有多低MATLAB是为了我需要做的事情 主要涉及数百万个点的图 我已经有几个版本了python从每次我想开始使用时就安装了 现在已经变得一团
  • HTML5:一个部分中有多个页脚/页眉

    我知道您可以在一个页面中有多个页眉 页脚 例如
  • 在 Xcode 12.5 中打开 Xcode 13.0 项目

    当我尝试打开 Xcode 项目时 我收到一条错误消息 无法打开 Users xcodeproj 处的项目 因为它 是未来的 Xcode 项目文件格式 调整项目格式 使用兼容版本的 Xcode 来允许它通过此打开 Xcode 的版本 我目前使
  • 盒子阴影仅在左右两侧

    我需要仅在元素的右侧和左侧制作盒子阴影 它应该褪色并且顶部和底部变薄 它也不应该溢出顶部和底部 主要问题是我无法阻止阴影在元素的顶部和底部溢出 这就是我所拥有的 HTML div div CSS div box shadow 0px 0px
  • React-router v4 页面刷新不起作用

    我可能错过了历史或其他什么但是当我refresh子路由上的页面 例如 login或我得到的任何其他路线 403 禁忌 代码 拒绝访问 消息 访问被拒绝 请求 ID 075CAA73BDC6F1B9 主机 ID O1n36xVCoeu aLa
  • PHP/MySQL - “最高评价”的算法

    所以我只是建立了一个星级评级系统 并尝试提出一种算法来列出 最高评级 的项目 为简单起见 以下是各列 item name average rating a decimal from 1 to 5 num votes 我正在尝试确定票数和评分
  • 在 dockerfile 中的 FROM 中使用 ARG

    问题陈述 我需要根据提供的arg从两个不同的url中提取docker projectS和project ARG url docker local artifactory com projectA By default its for A R
  • 重置 Django 缓存模板加载器的缓存

    Django 1 2 引入了一个新的模板加载器 它将数据存储在缓存中 django template loaders cached Loader 不幸的是 我未能找到有关缓存如何失效以及何时以及如何重置的任何信息 我想在我的服务器上使用它
  • TypeScript:reduce 函数 - 没有重载与此调用匹配

    尝试编写一个基本的减速器以从对象数组中返回键 的值 数组 某些键可能丢失或未定义 My code const data Key 56 Key undefined Key 44 const keys data reduce prev curr
  • $(document).ready() 和在正文末尾包含脚本有什么区别?

    在 jQuery 的 document ready 上执行 JavaScript 函数与将其包含在 HTML 正文末尾的脚本标记中之间有什么区别 Thanks DLiKS 里面的 JavaScript 代码
  • 为什么 n^O(1) 意味着“多项式时间”?

    An algorithm runs in polynomial time if it s runtime is O nk for some k However I ve also seen polynomial time defined a
  • 获取当前笔记本电脑盖子状态

    我正在编写一个 C 应用程序 专门用于笔记本电脑 我想了解盖子的状态 即何时打开以及何时关闭 我已经使用了 pInvoke 以及微软的RegisterPowerSettingNotification函数在 的帮助下这个答案 因此 通过上述内
  • PDFSharp:使用自动换行测量长文本的高度

    PDFSharp 在绘制长文本部分时支持自动文本换行 textFormatter DrawString text font XBrushes Black new XRect x y textAreaWidth 1000 XStringFor
  • 如何在列标题中使用希腊字母在 rmarkdown 中创建表格?

    我正在尝试在 rmarkdown 中创建一个表kable and kableExtra我想把希腊字母放在add header above功能 kable a format latex booktabs T longtable T gt ka
  • 更改多个 Python 实例中的变量

    是否可以同时设置类的所有实例的变量 我有一个简化的例子如下 class Object def init self self speed 0 instance0 Object instance1 Object instance2 Object