使用关键字参数设置类属性

时间:2019-05-16 11:48:05

标签: python class

此流行的question解决了使用关键字参数设置实例属性的问题。但是,我想构造一个类,该类的实例都基于某些字典具有相同的属性。如何实现?

这是我的尝试。看来我对类定义还不太了解。

d = {'x': 1, 'y': 2}


# Here's what I'd like to do
class A:
    __dict__ = d


# Answer from the linked question that works
class B:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)


a = A()
b = B(**d)

# print(A.x)  # Has no attribute x
# print(a.x)  # Has no attribute x
print(b.x)

这很好奇,因为a.__dict__b.__dict__都返回相同的东西。

1 个答案:

答案 0 :(得分:0)

type函数可以使用允许其动态创建新类的参数:

B = type('B', (), d)

b = B()

print(b.x, b.y)

输出:

1 2

第一个参数是生成的类的名称。第二个是包含其基类的tuple。特别是以下两个片段(大致)是等效的:

class D(A, B, C):
    pass

和:

D = type('D', (A, B, C), {})

最后一个参数是dict,将名称映射到属性(方法和值)。