2017-08-28 49 views
0

大家好我想在更改屬性的循環,如:Python 3的動態類屬性

user.project_0 mitarbeiter.percent_0 
user.project_1 mitarbeiter.percent_1 
user.project_2 mitarbeiter.percent_2 
... 



for x in range(10): 
    for mitarbeiter in user.select().where(user.project_0 == projektnummer): 
     # timedelta object 
     working_time = ((mitarbeiter.gehen_1 - mitarbeiter.kommen_1) + (mitarbeiter.gehen_2 - mitarbeiter.kommen_2)) 
     complete_time += (working_time.seconds/100) * mitarbeiter.percent_0 

我試着用SETATTR()和類型(),但我不能弄明白。 感謝您的幫助!

+1

你使用某種ORM嗎? – Oz123

+0

是的,我正在使用peewee和user.project_0涉及到數據庫中的一個條目 – mamolx

+1

是的,你可以用setattr:setattr(object,name,value)來設置屬性。像'setattr(mitarbeiter,'percent_%s'%x,complete_time)'。但要謹慎使用它,尤其是對於ORM,因爲您設置的屬性應該反映真實的數據庫列。 – 9dogs

回答

0

解決方案是使用getattr()並格式化字符串。

for x in range(10): 
    for mitarbeiter in user.select().where(getattr(user, 'project_{}'.format(x)) == projektnummer): 
     working_time = ((mitarbeiter.gehen_1 - mitarbeiter.kommen_1) + (mitarbeiter.gehen_2 - mitarbeiter.kommen_2)) 
     complete_time += (working_time.seconds/100) * getattr(mitarbeiter, 'percent_{}'.format(x))