Am o clasa, cum ar fi următoarele:
class User:
def __init__(self):
self.data = []
self.other_data = []
def doSomething(self, source):
// if source = 'other_data' how to access self.other_data
Vreau să treacă un șir de sursa variabilă în face ceva
și acces la membrii clasei de același nume.
Am încercat getattr care funcționează doar pe funcții (din ceea ce am putea spune), precum și ca având "Utilizator" se extind dict
și folosirea self.getitem`, dar asta nu't de lucru, fie. Ceea ce este cel mai bun mod de a face acest lucru?
x = getattr(auto, sursă)
va funcționa perfect dacă "sursă" ORICE nume atribut de sine, inclusiv `other_data în exemplu.
Extinderea Alex's răspuns ușor:
class User:
def __init__(self):
self.data = [1,2,3]
self.other_data = [4,5,6]
def doSomething(self, source):
dataSource = getattr(self,source)
return dataSource
A = User()
print A.doSomething("data")
print A.doSomething("other_data")
va randament:
[1, 2, 3] [4, 5, 6]
Cu toate acestea, eu personal nu't cred că's mare stil - getattr
vă va permite să accesați orice atribut de exemplu, inclusiv lucruri cum ar fi face ceva
metoda în sine, sau chiar __dict__
de exemplu. Aș sugera că, în loc să te pună în aplicare un dicționar de surse de date, astfel:
class User:
def __init__(self):
self.data_sources = {
"data": [1,2,3],
"other_data":[4,5,6],
}
def doSomething(self, source):
dataSource = self.data_sources[source]
return dataSource
A = User()
print A.doSomething("data")
print A.doSomething("other_data")
din nou, rezultând:
[1, 2, 3] [4, 5, 6]