簡體   English   中英

如何一次更改class的所有實例的實例變量,Python

[英]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 ,它看起來有兩個變量ab ,這樣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

沿着這些思路的其他事情也是可能的; 您可以在網上其他地方找到很多關於此的信息。

在您的情況下,您可能希望將xy或兩者都定義為檢查某個值的中心位置(可能是 class 變量或模塊級變量)的屬性,並根據該中心存儲的值計算屬性值。 也許您可能還需要可以操縱該集中存儲值的 setter 方法。

您可以通過方法或直接創建一個根據 static class 變量而變化的實例變量。 更改 static,您可以按所需方式修改實例,也許每個 object 都以不同的方式修改(取決於更多變量或方法......)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM