首页 > 解决方案 > 在 Python 中初始化类变量的快速方法

问题描述

我想初始化一个实例,让 args 和 kwargs 都成为类变量。

class Example():
    def __init__(
        self,
        a: str,
        b: bool,
        c: int,
        d="str",
        e=True,
        f=123,
    ):
        class_member = dict(locals())
        del class_member["self"]
        self.set_property(class_member)

    @classmethod
    def set_property(cls, kwargs):
        for key, value in kwargs.items():
            setattr(cls, key, value)

a = Example("test", True, 1, d="test", e=False, f=456)
print(Example.d)  # test

我已经搜索了很多并得到了上述结果。

有没有其他更清洁的方法来处理这个问题?谢谢!

- 编辑 -

感谢所有的答案。我的简化版:

class Example():
    def __init__(
        self,
        a: str,
        b: bool,
        c: int,
        d="str",
        e=True,
        f=123,
    ):
        class_member = dict(locals())
        del class_member["self"]
        for key, value in class_member.items():
            setattr(Example, key, value)

a = Example("test", True, 1, d="test", e=False, f=456)
print(Example.d)  # test

我之前考虑过使用**kwarg,但我仍然需要为 kwargs 分配默认值。所以这是我的最终解决方案。

标签: pythonclass-method

解决方案


您只能setattr使用kwargs

class Example:
    def __init__(self, **kwargs):
        for k, v in kwargs.items():
            setattr(Example, k, v)


a = Example(a="test", b=True, c=1, d="test", e=False, f=456)
print(Example.d)  # test

推荐阅读