大家好 - 尝试在类中设置一些动态属性时
例子:
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.