如何一次更改类的所有实例的实例变量,Python

如何一次更改类的所有实例的实例变量,Python,python,class,static,instance,non-static,Python,Class,Static,Instance,Non Static,我想使用特定于每个类实例的非静态变量对类的所有实例执行操作。我希望一次性完成此操作,而不单独处理每个类实例 我想做的一个例子: # 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 c

我想使用特定于每个类实例的非静态变量对类的所有实例执行操作。我希望一次性完成此操作,而不单独处理每个类实例

我想做的一个例子:

# 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()类的所有实例执行相同的操作?

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

但是,您可能对属性感兴趣,这是一种可以编写与访问变量相同的代码,但让它调用函数的方法。例如,如果您想要创建一个类,该类似乎有两个变量,
a
b
,这样
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
沿着这些路线的其他事情也是可能的;你可以在网上其他地方找到很多关于这方面的信息


在您的情况下,您可能希望将
x
y
或两者都定义为属性,以检查某个中心位置(可能是类变量或模块级变量)的某个值,并基于该中心存储的值计算属性值。也许您可能希望setter方法也能处理集中存储的值。

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

但是,您可能对属性感兴趣,这是一种可以编写与访问变量相同的代码,但让它调用函数的方法。例如,如果您想要创建一个类,该类似乎有两个变量,
a
b
,这样
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
沿着这些路线的其他事情也是可能的;你可以在网上其他地方找到很多关于这方面的信息


在您的情况下,您可能希望将
x
y
或两者都定义为属性,以检查某个中心位置(可能是类变量或模块级变量)的某个值,并基于该中心存储的值计算属性值。也许您可能希望setter方法也能操作集中存储的值。

是否有将变量绑定到实例的原因?如果不是,则可以将其存储在类变量中。而不是调用实例.x,您将修改ExpRel.XI与@ JRMyLoW的约定,如果您希望对所有实例都具有相同的值,则可以将其作为类变量。变量对于每个实例都是唯一的,并且修改变量的方式取决于其他实例变量,但是我想对每个类实例进行的计算是相同的。是否有理由将变量绑定到实例?如果不是,则可以将其存储在类变量中。而不是调用实例.x,您将修改ExpRel.XI与@ JRMyLoW的约定,如果您希望对所有实例都具有相同的值,则可以将其作为类变量。变量对于每个实例都是唯一的,并且修改变量的方式取决于其他实例变量,但是我想对每个类实例进行的计算是相同的。