Ale*_*scu 11 python type-safety
我正在寻找一种简单的方法来直接将 python 字典转换为自定义对象,如下所示,同时不破坏智能感知。结果不应该是只读的,它的行为应该就像一个新对象。
d = {
"key1": 1,
"key2": 2
}
class MyObject(object):
key1 = None
key2 = None
# convert to object o
# after conversion
# should be able to access the defined props
# should be highlighted by intellisense
print(o.key1)
# conversion back to dict is plain simple
print(o.__dict__)
Run Code Online (Sandbox Code Playgroud)
Adi*_*rio 17
您的对象没有字段,只有类属性。您需要创建一个__init__方法,有些人将其称为构造函数,但它实际上并不是其他语言所理解的构造函数,因此我们避免这样调用它。
class MyObject:
def __init__(self, d=None):
if d is not None:
for key, value in d.items():
setattr(self, key, value)
d = {
"key1": 1,
"key2": 2,
}
o = MyObject(d)
Run Code Online (Sandbox Code Playgroud)
注意:上面的代码将尝试将字典中的所有键值对设置为对象中的字段。一些有效的键(例如)"key.1"将不是有效的字段名称(它实际上会被设置,但您将无法使用 获取它o.key.1)。
我会使用数据类(需要 Python 3.7+):
from dataclasses import dataclass
@dataclass
class MyObject:
key1: int = None
key2: int = None
d = {
"key1": 1,
"key2": 2,
}
o = MyObject(**d)
print(o) # MyObject(key1=1, key2=2)
print(vars(o)) # {'key1': 1, 'key2': 2}
Run Code Online (Sandbox Code Playgroud)
dataclass会自动为你生成__repr__、__eq__、 __hash__、 等一些方法。
| 归档时间: |
|
| 查看次数: |
21958 次 |
| 最近记录: |