此流行的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__
都返回相同的东西。
答案 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
,将名称映射到属性(方法和值)。