Python从字典创建类实例

我有很多字段可以在我的程序运行时更改的类,但是当我在我的init中创建新对象时,我只能更改其中的一些,我想将这些更改保存到 JSON 文件中,以后可以创建具有这些变量的新对象。除了让我的init接受 100 个参数之外,还有其他方法吗?


换句话说,我希望它是这样的:


class MyClass:

    def __init__(self, q, w):

        self.q = q

        self.w = w

        self.e = 30

        self.r = 40

        

a = MyClass(10,20)

dct = {'q': 100, 'w': 200, 'e': 300, 'r': 400}

print('before:', tmp.q, tmp.w, tmp.e, tmp.r)

for i in dct:

    #do sth here

print('after:', tmp.q, tmp.w, tmp.e, tmp.r)

before: 10 20 30 40

after: 100 200 300 400


鸿蒙传说
浏览 89回答 2
2回答

慕丝7291255

以下是如何使用关键字参数来做到这一点:class MyClass:    def __init__(self, **q):        self.__dict__.update(q)a = MyClass(a=10, b=20, c=50, d=69)print(a.a)print(a.b)print(a.c)print(a.d)输出:10205069用字典:class MyClass:    def __init__(self, **q):        self.__dict__.update(q)        dct = {'q': 100, 'w': 200, 'e': 300, 'r': 400}a = MyClass(**dct)print(a.q, a.w, a.e, a.r)输出:100 200 300 400

HUH函数

与其操纵类实例__dict__,我建议使用该setattr方法。class MyClass:    def __init__(self, new_vals):        for k, v in new_vals.items():            setattr(self, k, v)dct = {'q': 100, 'w': 200, 'e': 300, 'r': 400}a = MyClass(dct)print(a.q, a.w, a.e, a.r)恕我直言,内部结构有两个前导下划线是有原因的__dict__。我的一般建议是尽可能避免访问任何带有两个前导下划线的属性/方法。另请参阅下文以获取对考虑此主题的 Python 文档的参考。如果你想把它减少到一行,你也可以使用“虚拟”列表理解。下划线捕获None返回值,但不一定是必需的。class MyClass:    def __init__(self, new_vals):        _ = [setattr(self, k, v) for k, v in new_vals.items()]对有关操作内置__dict__属性的 Python 文档的简短参考:每个模块的特殊属性是__dict__. 这是包含模块符号表的字典。__dict__修改这个字典实际上会改变模块的符号表,但是不能直接给属性赋值(你可以写m.__dict__['a'] = 1,它定义m.a为1,但你不能写m.__dict__ = {})。不建议直接修改。__dict__请参阅有关内置类型的 Python 文档
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python