python - 通过强制转换从 Dict 设置类的属性

标签 python python-3.x dictionary casting setattribute

我正在尝试将具有键值对的 [str,str] 字典解析为对象(类)。 第一个包含属性名称,第二个包含值。

例如:[('CLIENT_ID','123456'), ('AUTO_COMMIT', 'False'), ('BROKER_URL', 'http://foo.bar')]

要解析的代码如下:

class KafkaSettings():
    BROKER_URL: str = None
    CLIENT_ID: str = None
    AUTO_COMMIT: bool = False

    def __init__(self, d: Dict[str, str]):
        if d is not None:
            for key, value in d.items():
                attr = self.__getattribute__(key)
                casted_value = cast(attr, value)
                self.__setattr__(key, casted_value)

解析器可以工作,但值的类型已更改。例如,AUTO_COMMIT attr 为 bool 类型,但使用 setattr 将类型更改为 str。将值转换为良好类型不起作用。 我不懂 Python 语言。

如何解决这个问题?

谢谢

最佳答案

您可以使用下面的代码解决这个问题,

from typing import Dict


class KafkaSettings():
    BROKER_URL: str = None
    CLIENT_ID: str = None
    AUTO_COMMIT: bool = False

    def __init__(self, d: Dict[str, str]):
        if d is not None:
            for key, value in d.items():
                attr = self.__getattribute__(key)
                
                # change as follows
                if key == "AUTO_COMMIT":
                    value = bool(value)

                self.__setattr__(key, value)

您可以通过检查 key 来解决此问题,如果它等于 AUTO_COMMIT,则可以使用 string 方法将 bool 值转换为 bool() 值。

但请注意,这是针对您的代码的特定解决方案。因此,在制作 type 时,最好将这些值与其实际的 dictionary (根据需要)相加。那么你就不需要任何转换。

举个例子,在这种情况下,你可以使用这个,

[('CLIENT_ID','123456'), ('AUTO_COMMIT', False), ('BROKER_URL', 'http://foo.bar')]

(将 False 存储为 bool 值而不是字符串)

而不是这个,

[('CLIENT_ID','123456'), ('AUTO_COMMIT', 'False'), ('BROKER_URL', 'http://foo.bar')]

关于python - 通过强制转换从 Dict 设置类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75768237/

相关文章:

python - 模块未找到错误: No module named '' in Scrapy

python - 你如何在 python 中进行 block 注释?

python - 如何停止在 Django 2.* 管理面板中记录最近的操作和历史记录?

python - 套接字关闭和重新绑定(bind) - 如何避免长时间等待?

c# - C#中的字典数组

ios - 如何将字典值数组显示为按钮?

python - 模块未找到错误 : No module named 'xarray.core.accessors'

python - 从具有多个元素python的列表中返回最大值

python - 如何将列表中的元素组合到一个新的嵌套列表中?

r - 如何正确链接极坐标投影图周围的跟踪点?