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

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

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

有帮助吗?

解决方案

如何:

class C(object):
    blah blah

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

也就是说,执行属性的定义之后设置。

其他提示

class C (object):
    pass

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

如果你的整个班级都是“计算”的,那么我可以建议 type 可调用。如果您的原始容器是一个字典,这尤其有用:

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 元类 =)

什么有关使用元类用于此目的?

请查看问题100003:什么是Python中的元类

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top