Python 3的动态类属性
问题描述:
大家好我想在更改属性的循环,如: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()和类型(),但我不能弄明白。 感谢您的帮助!
答
解决方案是使用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))
你使用某种ORM吗? – Oz123
是的,我正在使用peewee和user.project_0涉及到数据库中的一个条目 – mamolx
是的,你可以用setattr:setattr(object,name,value)来设置属性。像'setattr(mitarbeiter,'percent_%s'%x,complete_time)'。但要谨慎使用它,尤其是对于ORM,因为您设置的属性应该反映真实的数据库列。 – 9dogs