![](/img/trans.png)
[英]Why does python change all instances of a class upon changing one single instance?
[英]How to change an instance variable of all instances of a class at once, Python
我想對 class 的所有實例執行操作,使用特定於每個 class 實例的非靜態變量。 我想在一個 go 中執行此操作,而不單獨處理每個 class 實例。
我想做的一個例子:
# 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
目前,我正在逐個循環遍歷所有 class 個對象:
Example_instance_list = [a, b]
for instance in Example_instance_list:
instance.x = instance.x + instance.y + 5
但是,我試圖避免循環遍歷每個 class 實例。
有沒有辦法使用特定於每個 class 實例的非靜態變量在一個 go(無循環)中對 Example() class 的所有實例執行相同的操作?
不,這是不可能的,至少不是直接以你談論它的方式。 每個實例都有一組獨立的實例變量,因此沒有一個中心位置可以設置或更改值,以便所有現有實例都能反映更改。
但是,您可能對屬性感興趣,這是一種您可以編寫與訪問變量相同的代碼但改為調用 function 的方法。 舉個例子,如果你想創建一個 class ,它看起來有兩個變量a
和b
,這樣b
總是比 a 多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
或兩者都定義為檢查某個值的中心位置(可能是 class 變量或模塊級變量)的屬性,並根據該中心存儲的值計算屬性值。 也許您可能還需要可以操縱該集中存儲值的 setter 方法。
您可以通過方法或直接創建一個根據 static class 變量而變化的實例變量。 更改 static,您可以按所需方式修改實例,也許每個 object 都以不同的方式修改(取決於更多變量或方法......)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.