2010-08-25 33 views
0

我想保留一個腳本中創建的對象的引用,以便在另一個腳本中使用它們(不使用擱置)。在Python中創建和檢索對象列表

我想一些接近:

腳本1

class Porsche(Car): 
    """ class representing a Porsche """ 
    def __init__(self, color):  
     self.color = color 


class Porsche_Container: 
    # objects here 
    return objects 

my_Porsche = Porsche(blue) 
my_Porsche2 = Porsche(red) 

SCRIPT2

for object in Porsche_Container: 
    print object.color 

RGDS,

回答

0

做到這一點,最好的辦法是明確構建集您想要訪問的對象。可以列出例如在另一個腳本中定義的所有全局變量,但不是一個好主意。


script1

... 
porsche_container = { myPorsche1, myPorsche2 } 

script 2

import script1 
for porsche in script1.porsche_container: 
    ... 
+0

腳本1還可以產生物體爲迭代。 – 2010-08-25 10:19:40

+0

@katrielalex你的答案似乎很好,但我得到一個「SyntaxError:無效語法錯誤」的消息。 – Bruno 2010-08-25 10:23:19

+0

@Guillaume Lebourgeois這個選項看起來也很合適,請你舉個例子嗎? – Bruno 2010-08-25 10:27:19

0

難道這些腳本會在不同的進程中運行?如果不是,解決方案非常簡單(請參閱katriealex的answer)。

如果他們要在不同的流程中運行,那麼您需要更復雜的解決方案,包括進程間通信。

+0

這些腳本將在同一個進程中運行。 – Bruno 2010-08-25 10:28:00

0

我假設你只想要一個進程。

使用import,將一個「腳本」視爲主要module,將另一個「腳本」視爲導入的庫模塊。在我的修改示例中,script2.py是主要模塊,而script1.py是庫。

script1.py

# -*- coding: utf-8 -*- 

class Porsche(object): 
""" class representing a Porsche """ 
def __init__(self, color): 
      self.color = color 

BLUE = 1 
RED = 2 

def make_porsche_list(): 
    return [Porsche(BLUE), Porsche(RED)] 

script2.py

# -*- coding: utf-8 -*- 

import script1 

porsche_container = script1.make_porsche_list() 

for object in porsche_container: 
    print object.color 

輸出:

[email protected]:~/Desktop/test> python script2.py 
1 
2 
[email protected]:~/Desktop/test> ls 
script1.py script1.py~ script1.pyc script2.py script2.py~ 
+0

感謝這篇文章,我會試着看看更方便的方法。 – Bruno 2010-08-25 11:39:01

+0

@布魯諾 - 他們是一樣的方法! – katrielalex 2010-08-25 12:29:54

+0

是的,我的方法和katrielalex的方法是一樣的。然而,katrielalex的回答太短了,因此我想多解釋一下 - 但是我被帶走了,寫了兩個簡短的腳本。同樣使用函數來創建數據似乎是一個更好的設計,在真正的程序中,列表不會是常量。 – Eike 2010-08-25 12:43:28