2012-07-19 50 views
-1

我想創建一個由所有對象實例共享的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] 
+0

你爲什麼要這麼做? – Hannele 2012-07-19 17:04:28

+2

-1你有什麼問題?只要你使用新風格的類,這應該可以工作。 – Marcin 2012-07-19 17:04:32

+1

@cory:「重讀問題」是什麼意思?那裏有哪些與他的評論有關的信息? – 2012-07-19 17:07:14

回答

4

如果修復代碼中的兩個錯誤是無關你的問題,你的代碼做正是你問它是什麼。

兩個錯誤是改變:

def add(item): 

def add(self, item): 

,改變

def get(): 

def get(self): 

那時候,運行你的代碼確實從得到了["Hello", "Dave"]從每個返回。

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] 
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

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'] 
相關問題