2017-08-28 51 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))