具有“计算”名称的类属性

时间:2009-05-26 19:57:28

标签: python exec class-attributes

通过“计算”名称定义类属性时,如:

class C(object):
    for name in (....):
        exec("%s = ..." % (name,...))

是否有一种不同的方法来处理众多属性定义而不是使用exec? getattr(C,name)不起作用,因为在类构造期间没有定义C ......

4 个答案:

答案 0 :(得分:11)

怎么样:

class C(object):
    blah blah

for name in (...):
    setattr(C, name, "....")

即,在定义之后进行属性设置。

答案 1 :(得分:3)

class C (object):
    pass

c = C()
c.__dict__['foo'] = 42
c.foo # returns 42

答案 2 :(得分:2)

如果您的整个课程都是“计算”的,那么我可以建议type可调用。如果您的原始容器是dict:

,这尤其有用
d = dict(('member-%d' % k, k*100) for k in range(10))
C = type('C', (), d)

这会给你与

相同的结果
class C(object):
    member-0 = 0
    member-1 = 100
    ...

如果您的需求非常复杂,请考虑使用元类。 (事实上​​,type 是元类=)

答案 3 :(得分:0)

为此目的使用元类怎么样?

查看Question 100003 : What is a metaclass in Python?