gpt4 book ai didi

python - 在类实例之间共享列表的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 10:32:10 28 4
gpt4 key购买 nike

我有这个示例代码

my_list = ["a","b","c","d"]

class A:
def __repr__(self):
return ', '.join(my_list)

def add(self, num):
my_list.append(num)



class_list = []
for x in range(5):
class_list.append(A())
class_list[x].add("class_%s" % (x))
print class_list[x]

我的非示例代码更复杂,但想法是我有多个类实例来做“事情”。全局 my_list 在所有实例中使用。当某个类中满足特定逻辑时,该实例将修改列表。其余类也将利用该列表来执行它们的逻辑。任何实例都可以添加到列表中,并且所有实例都应该能够利用更新后的值。

现在在这个例子中,my_list 是共享的,但这是正确的做法吗?

最佳答案

类属性通常比全局属性好,因为它们只是彼此共享,而不是与世界上的每个人共享。

为此,将 my_list = ["a","b","c","d"] 行移动到 class A: 下,然后将对 my_list 的每个引用更改为 self.my_listA.my_list:

class A(object):
shared_list = []
def add(self, num):
self.my_list.append(num)

但是,实例属性通常甚至更好。如果将同一个列表分配给一堆不同的变量,它仍然只是一个列表;改变它会影响所有这些变量。所以,你可以这样做:

class A(object):
def __init__(self, shared_list):
self.shared_list = shared_list
def add(self, num):
self.shared_list.append(num)

现在由使用 A 对象的代码来决定是否为它们提供相同的列表。您甚至可以创建 20 个共享一个列表的实例,以及 10 个共享不同列表的实例:

list1 = []
group1 = [A(list1) for _ in range(20)
list2 = []
group2 = [A(list2) for _ in range(10)

问题在于调用者、A 类或根本没有人应该决定列表的“共享”程度。对于不同的应用程序,答案是不同的,因此很难给出一个抽象示例的答案,如 Amy_list

关于python - 在类实例之间共享列表的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25777339/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com