這是對問題912526 - How do I pass lots of variables to and from a function in Python?的後續處理。如何使用派生自Python列表類的類
在我編寫的程序中需要傳遞很多變量,從我之前的問題中我明白我應該將這些變量放入類中,然後傳遞類。
其中一些變量來自重複設置 - 對於需要跟蹤多個層的光學屬性(折射率,吸收率,厚度等)的薄膜計算。
是否存儲像這樣的變量以創建一個派生自Python列表的類的最好方法來存儲每個容納單個圖層變量的類集?然後將處理層中的一組圖層的函數放置在派生自列表的類中,以及處理該類中特定圖層的函數?有沒有更好的方法來做到這一點與單個類?
使用下面的例子中的兩個班的做法,我能夠做一些事情,讓我可以訪問使用statments變量,如
n1 = layers[5].n
這是做到這一點的最好辦法,是吧?
#Test passing values to and from functions
class Layers(list):
def add(self,n,k,comment):
self.append(OneLayer(n,k,comment))
def input_string(self):
input_string = []
for layer in self:
vars = layer.input_string()
for var in vars:
input_string.append(var)
return input_string
def set_layers(self,results):
for layer,i in enumerate(self):
j = i*layer.num_var
layer.set_layer(*results[j:j+2])
class OneLayer(object):
def __init__(self,n,k,comment):
self.n = n
self.k = k
self.comment = comment
def input_string(self):
return [['f','Index of Refraction',self.n], ['f','Absorption',self.k],['s','Comment',self.comment]]
def set_layer(self,n,k,comment):
self.n = n; self.k=k; self.comment = comment
def num_var(self):
return 3
if __name__ == '__main__':
layers = Layers()
layers.add(1.0,0.0,'This vacuum sucks')
layers.add(1.5,0.0,'BK 7 Glass')
print layers[0].n
print layers.input_string()
layers[1].set_layer(1.77,0.0,'Sapphire')
print layers.input_string()
我從這個測試程序的輸出如下:
1.0
[['f', 'Index of Refraction', 1.0], ['f', 'Absorption', 0.0], ['s', 'Comment', 'This vacuum sucks'], ['f', 'Index of Refraction', 1.5], ['f', 'Absorption', 0.0], ['s', 'Comment', 'BK 7 Glass']]
[['f', 'Index of Refraction', 1.0], ['f', 'Absorption', 0.0], ['s', 'Comment', 'This vacuum sucks'], ['f', 'Index of Refraction', 1.77], ['f', 'Absorption', 0.0], ['s', 'Comment', 'Sapphire']]
你真的需要從`list`繼承了`Layers`類?只需使用列表。 – 2009-05-28 18:34:22