【问题标题】:Python string to object (or class?)Python字符串到对象(或类?)
【发布时间】:2013-11-26 00:59:00
【问题描述】:

我正在尝试遍历已知元素的列表,以便检查它们是否正确提交,然后对它们进行处理。问题是,我的元素是字符串,但是需要对应的元素对象来给用户对象赋值。

应该在 eval(element) 所在的位置有别的东西吗?

elements = ('first_name', 'last_name', 'email')

u = request.user

for element in elements:    
    if not element in form.errors:
        dajax.alert('alert: %s' % form.cleaned_data[element])
        u.eval(element) = form.cleaned_data[element]
        dajax.add_css_class('div #%s' % element , 'form-group has-success')

【问题讨论】:

  • google setattr, getattr... 你会找到答案的。
  • 风格提示:这被认为是一种不好的做法:if not element in form.errors:。如图here,应该是:if element not in form.errors:(我知道链接谈到is,但同样的规则适用于in)。
  • 您确定要这样做吗?如果您的对象只有一个 dict 属性和键 'first_name''last_name''email',而不是三个单独的属性,那么您不需要花哨的 setattr(thingy, element, value),只需 thingy.elements[element] = value。有关详细信息,请参阅 this blog postthis one
  • 当然,如果您在大部分代码中使用这些属性作为静态命名属性,并且只需要在一个地方动态访问它们,那么这是一个合理的方式来做到这一点。只是当您通常想要动态访问它们时,您可能不需要属性。

标签: python django forms eval dajax


【解决方案1】:

像这样使用setattr

setattr(u, element, form.cleaned_data[element])

【讨论】:

  • 谢谢 sberry。对于其他刚刚学习 python 的内置函数的人,请注意您可能不会: getattr(u, element) = form.cleaned_data[element] 使用 setattr() 如 sberry 所示。
猜你喜欢
  • 2011-09-04
  • 2018-03-28
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多