Bu, 912526 - How do I pass lots of variables to and from a function in Python? numaralı soruların bir takip numarasıdır.Python'un liste sınıfından türetilen sınıflar nasıl kullanılır?
Yazdığım programda geçilmesi gereken birçok değişken var ve önceki sorudan, bu değişkenleri sınıflara koymam gerektiğini ve sonra sınıfları geçtiğimi anlıyorum.
Bu değişkenlerin bazıları tekrarlı setler halinde gelir - ince film hesaplaması için, bir dizi katman için optik özellikleri (kırılma indeksi, absorpsiyon, kalınlık, vb.) Izlemem gerekir.
Her biri tek bir katman için değişkenleri tutan sınıf kümesini saklamak için bir Python listesinden türetilmiş bir sınıf oluşturmak için bu gibi değişkenleri depolamanın en iyi yolu nedir? Ardından, listeden türetilen sınıftaki katman kümesini ve bu sınıftaki belirli bir katmanı ele alan işlevleri ele alan işlevleri yerleştirin. Bunu tek bir sınıfla yapmanın daha iyi bir yolu var mı?
aşağıdaki örnekte iki sınıf yaklaşımı kullanarak, ben
n1 = layers[5].n
Bu hak, bunu yapmanın en iyi yolu gibi statments kullanarak değişkenleri erişebilmesi şeyler kurmak mümkün değil mi?
#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()
Bu test programı aşağıdaki çıktıyı almak:
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']]
geçersiz kılmak için, bu şekilde gerçekten 'list 'dan devralan bir' Layers' sınıfını gerekiyor mu? Bunun yerine sadece bir liste kullanın. –