python - 在 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 分配默认值。所以这是我的最终解决方案。
解决方案
您只能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
推荐阅读
- kotlin - 如何使用 kotlin 在其他类中调用按钮
- c# - 在 C# 异步和等待全局变量崩溃
- java - 如何在服务中的数组中保存位置数据并将该数组发送到活动/片段?[安卓/Java]
- dictionary - 如何使用字典在python中创建多维结构数组
- django - 在 Django 中的 ModelForm 中更新/更改当前用户实例的信息
- c# - 获取错误作为@Parameter1 不是过程的参数
- angular - openlayers 地图未显示在我的应用程序中,尽管它似乎已正确加载
- angular - Angular 11 SSR 已编译,但 prod 构建和服务出现问题,浏览器中未显示任何内容
- python - 无法使用标准代码从 Python API 访问和下载 Sentinel-2 图像
- c# - 从动态 URL 读取 JSON 并需要填充到 Dot-net Core MVC 下拉列表中