问题描述
我想使用特定于每个类实例的非静态变量对类的所有实例进行操作。我想一次性执行此操作,而不必单独对待每个类实例。
我想做的事的例子:
# 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方法,这些方法也可以操纵集中存储的值。