类中的setattr

大家好 - 尝试在类中设置一些动态属性时
例子:
A类:
对于['1','2']中的lang:
exec('title_%s = lang'%lang)#这项工作,但很丑陋
#setAttr(a," title_%s"%lang,lang)#这个无法工作
setAttr(a," title_1"," x")#外面班级时此工作
打印A.Title_1
打印A.Title_2
我想尚未在第4行中存在的课程.是否有可能实现
不使用EXER添加动态属性?
谢谢,
bojan

# 回答1


Bojan Mihelac写道:
将for-In循环移出班级定义:
.... 经过
...
.... setattr(a," title_%s"%lang,lang)
'1'
真正的动态解决方案(使用__getAttr __并在访问中修改)
可能会给您更多的" Pythonic"解决方案.
# 回答2


Bojan Mihelac写道:
正确,班级直到班级的尽头才存在.你
可以在类定义之外执行此操作,也可以使用Metaclass.
克里斯蒂安
# 回答3


在9月12日,5:21*下午,Christian Heimes
  • 正确,班级直到班级的尽头才存在.你
    可以在类定义之外执行此操作,也可以使用Metaclass.
    基督教
    谢谢,您可以举例说明使用元素吗?
  • # 回答4


    在9月12日,4:30*PM,Bojan Mihelac 谢谢,您可以举例说明使用元素吗?
    类Moremeta(类型):
    def __init __(自我,名称,基础,attrs):
    更多= attr.get('sureattrs')
    如果有更多:
    对于attr,more.iteritems()中的val:
    setattr(self,attr,val)
    类MoreObject(对象):
    __ metaclass__ = moremeta
    A类(MoreObject):
    moreattrs = {}
    因为我在" 12"中:
    moreattrs ['title_' + i] = int(i)
    1
    2
    - -
    Arnaud
    # 回答5


    在9月12日上午11:08,Bojan Mihelac 是不是真的值得吗?如果属性的名称仅是已知的
    在运行时,为什么不只是使用dict-这就是他们的目的.如果你
    想要一个dict加一些特殊行为,只需写一个课程
    从dict继承,或使用userdict.dictmixin.

    标签: python

    添加新评论