To jest kontynuacja pytania 912526 - How do I pass lots of variables to and from a function in Python?.Jak używać klas wyprowadzonych z listy klas Pythona
Istnieje wiele zmiennych, które muszą zostać przekazane w programie, który piszę, i z mojego poprzedniego pytania rozumiem, że powinienem umieścić te zmienne w klasach, a następnie omijać klasy.
Niektóre z tych zmiennych występują w zestawach powtarzalnych - w przypadku obliczeń cienkowarstwowych należy śledzić właściwości optyczne (współczynnik załamania, pochłaniania, grubości itp.) Dla wielu warstw.
Czy najlepiej zapisać takie zmienne, aby utworzyć klasę wyprowadzoną z listy Pythona, aby przechowywać zestaw klas, z których każda zawiera zmienne dla pojedynczej warstwy? A następnie umieścić funkcje, które dotyczą zestawu warstw w klasie, wyprowadzone z listy oraz funkcje, które dotyczą konkretnej warstwy w tej klasie? Czy istnieje lepszy sposób na zrobienie tego z jedną klasą?
Stosując podejście dwie klasy w poniższym przykładzie, jestem w stanie ustawić rzeczy tak, że można uzyskać dostęp do zmiennych przy użyciu statments jak
n1 = layers[5].n
Jest to najlepszy sposób, aby to zrobić, prawda?
#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()
otrzymuję następujący wyjście z tego programu testowego:
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']]
Czy naprawdę potrzebujemy klasę 'Layers' która dziedziczy' list'? Po prostu użyj listy. –