2010-08-25 48 views
0

這篇文章是我以前的文章(在Python中創建和檢索對象列表)的後續。在Python中創建和檢索對象列表增強

我不得不修改我的代碼以下列方式:

SCRIPT1

#!/usr/bin/python 

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


def create_porsche(parameter_1, parameter_2): 
    myPorsche = Porsche(color = parameter_1) 
    myPorsche2 = Porsche(color = parameter_2) 

create_porsche(parameter_1 = 'blue', parameter_2 = 'red') 
porsche_container = (myPorsche, myPorsche2) 

,我想有porsche_container =(myPorsche,myPorsche2)工作方式一樣在我以前的腳本:

舊腳本1

#!/usr/bin/python 

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


myPorsche = Porsche(color = 'blue') 
myPorsche2 = Porsche(color = 'red') 


porsche_container = (myPorsche, myPorsche2) 

我如何能做到這一點,請?

RGDS,

+0

布魯諾嗨,它是什麼,你想實現/你是如何計劃使用呢?它可能會更容易幫助您獲得更多信息。 – MattH 2010-08-25 12:56:55

+0

@MattH感謝您的關注,幸運的是Stack Overflow存在! – Bruno 2010-08-25 13:05:24

回答

0

以下是我如何着手創建Porsche對象並將它們添加到容器中。

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

class PorscheCreator(object): 
    def __init__(self): 
     self._cars = [] 
    def create(self, *args, **kwargs): 
     porsche = Porsche(*args, **kwargs) 
     self._cars.append(porsche) 
     return porsche 
    def _get_cars(self): 
     for each in self._cars: 
      yield each 
    cars = property(_get_cars) 

creator = PorscheCreator() 
myPorsche = creator.create('blue') 
myPorsche2 = creator.create('red')  

而且在腳本2:

from script1 import creator 

for each in creator.cars: 
    print car.color 
+0

@ Manoj Govindan感謝您的幫助! – Bruno 2010-08-25 13:06:18

1

create_porsche不返回任何東西,所以你不知道它的創建。讓它返回它創建的汽車列表,然後將其存儲到全局變量中。

def create_porsche(parameter_1, parameter_2): 
    myPorsche = Porsche(color = parameter_1) 
    myPorsche2 = Porsche(color = parameter_2) 

    return [ myPorsche, myPorsche2 ] 

porsche_container = create_porsche(parameter_1 = 'blue', parameter_2 = 'red') 

的原因,你上面貼不工作的代碼是變量myPorschemyPorsche2的功能create_porsche中定義的,所以他們是作用域該功能。這意味着您無法在該代碼塊外查看或訪問它們。如果你想知道他們,請讓create_porsche歸還。 (注:有可能來告訴Python,他們應該是全球性的變量,即,在函數內部沒有作用域 - 使用global關鍵字 - 但你不應該這樣做,除非你必須這樣做。)


我不是故意在這裏粗魯,但你有沒有讀過任何Python教程?像Dive Into Python這樣的東西可能會幫助你理解像這樣的東西(函數作用域和返回值)。

+0

感謝您的回答。其實我現在時間真的很短,但是我會盡快睡在枕頭下的Dive! – Bruno 2010-08-25 13:07:18