如何立即更改类的所有实例的实例变量,Python

问题描述

我想使用特定于每个类实例的非静态变量对类的所有实例进行操作。我想一次性执行此操作,而不必单独对待每个类实例

我想做的事的例子:

# Define the example class
class Example:
    __init__(self,x,y):
        self.x = x
        self.y = y

# Initalise class instances
a = Example(1,2)
b = Example(7,3)

# Operate on the class objects simultaneously:
All_Example_class_instances.x = All_Example_class_instances.x + All_Example_class_instances.y + 5

此刻,我正在逐个循环所有类对象:

Example_instance_list = [a,b]

for instance in Example_instance_list:
    instance.x = instance.x + instance.y + 5

但是,我试图避免遍历每个类实例

是否可以使用特定于每个类实例的非静态变量一次性(无循环)对Example()类的所有实例执行相同的操作?

解决方法

不,这是不可能的,至少不能直接以您所谈论的方式。每个实例都有一组独立的实例变量,因此没有一个中心位置可以设置或更改值,以使所有现有实例都可以反映更改。

但是,您可能对属性感兴趣,这是一种可以编写与访问变量相同的代码,但可以让它调用函数的方法。仅举例来说,如果您要创建一个类,该类似乎具有两个变量ab,这样b总是比a多一个:>

class Example:
    def __init__(self,a):
        self.a = a
    @property
    def b(self):
        return self.a + 1

通过此操作,您可以执行以下操作:

>>> instance = Example(1)
>>> instance.a,instance.b
(1,2)
>>> instance.a = 5
>>> instance.a,instance.b
(5,6)

也可以通过编写类似的代码来允许设置属性

class Example:
    def __init__(self,a):
        self.a = a
    @property
    def b(self):
        return self.a + 1
    @b.setter
    def set_b(self,value):
        self.a = value - 1

沿着这些思路的其他事情也是可能的;您可以在线上其他地方找到很多有关此的信息。

在您的情况下,您可能想将xy或两者都定义为属性,这些属性检查中心位置(可能是类变量或模块级变量)的某些值,并且根据该集中存储的值计算属性值。也许您可能希望使用setter方法,这些方法也可以操纵集中存储的值。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...