如何在Python中创建一个由对象的所有实例共享的变量?

时间:2012-07-19 17:02:31

标签: python

我想在Python中创建一个由对象的所有实例共享的变量。

class myobj:
  shared = []

  def add(item):
     self.shared.append(item)

  def get():
     return self.shared

item = myobj()
item.add("Hello")

item2 = myobj()
item2.add("Dave")

item.get()  # this should return [Hello, Dave]
item2.get() # this also should return [Hello, Dave]

4 个答案:

答案 0 :(得分:4)

如果您在代码中修复了与您的问题无关的两个错误,那么您的代码正好您所要求的错误。

这两个错误要改变:

def add(item):

def add(self, item):

并更改

def get():

def get(self):

此时,运行代码 从每个代码返回["Hello", "Dave"]

答案 1 :(得分:2)

在您的方法中为self提供参数后,您的代码可以正常工作:

class myobj:
  shared = []

  def add(self, item): # added self parameter
     self.shared.append(item)

  def get(self): # added self parameter
     return self.shared

我建议您阅读Python 'self' explained的答案。

答案 2 :(得分:0)

这将有效:

class myobj:
  shared = []

  def add(self, item):
     self.shared.append(item)

  def get(self):
     return self.shared

item = myobj()
item.add("Hello")

item2 = myobj()
item.add("Dave")

item.get()  # returns [Hello, Dave]
item2.get() # also returns [Hello, Dave]

答案 3 :(得分:0)

以下是三张海报的证明:

>>> class Foo:
...      shared = []
...
...      def add(self, item):
...           self.shared.append(item)
...
...      def get(self):
...           return self.shared
... 
>>> item = Foo()
>>> item.add('hello')
>>> item2 = Foo()
>>> item2.add('world')
>>> item2.get()
['hello', 'world']