2011-08-12 23 views
0

我正在使用定義爲zonesystem的2個類。 system應該包含幾個區域,但數量可能會有所不同。所以,我的示例中定義的類zone這樣:如何定義具有可變屬性的類

class zone(object): 
    def __init__ (self, 
     nameZone = None, 
     height = None, 
     width = None): 

     self.nameZone = nameZone 
     self.height = height 
     self.width = width 

和類system如下:

class system(object): 
    def __init__(self, 
       SystemName = None, 
       NumberOfZones = None, 
       zone = None): 

     self.SystemName = SystemName 
     self.NumberOfZones = NumberOfZones 
     self.zone = zone 

因此,例如,我想知道我怎麼去定義的類具有可變數量參數的系統?像例如我可以有:

building = system(2, apart1, apart2) 
building2 = system(3, apart1,apart2,apart3) 

其中當然apart1,2和3的被定義爲zone類。

我已經試過類似:

for i in range(self.NumberOfZones) 
     self.zone = zone 

但是,這並不明顯工作。

+0

爲什麼不使用像self.Zones這樣的可變區域,然後將所有區域添加到其中。 –

+0

不是一個完整的重複,但大部分處理問題:http://stackoverflow.com/questions/1098549/proper-way-to-use-kwargs-in-python –

回答

0

您可以使用變量args功能。

class system(object): 
    def __init__(self, SystemName, *zones): 
     self.SystemName = SystemName 
     self.zones = list(zones) 

    # The number of zones is the length of the zones list. 

然後你可以放任何數字,甚至不必指定多少。 Python將僅收集名稱後面的所有參數。

+1

你不需要調用'list (區域)'作爲區域是列表。 –

+0

我現在的問題是這樣的:AttributeError:'zone'對象沒有屬性'append'。因爲我使用的是這樣的:self.fileinwhichiwrite.append(line),這樣我就可以將所有想要打印的結果寫入文本文件。有沒有辦法使用這self.file.append(行)arround? – caran

+0

@Jakob,不,zone是一個元組。如果你希望它可變後(如附加到它),你需要將其轉換爲列表。 – Keith

0
class System(object): 
    def __init__(self, system_name = None, *zones): 
    self.system_name = system_name 
    self.number_of_zones = len(zones) 
    self.zones = zones 

我清理到PEP8輕微和number_of_zones離開。

0

使用可變參數是可以的,但我會說明確地傳遞一個區域列表。這樣,如果需要,您可以在將來添加不同的命名參數。

相關問題