我正在尝试将具有键值对的 [str,str] 的 Dict 解析为对象(类)。 第一个包含属性名称,第二个包含值。
例如:
[('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
存储为布尔值而不是字符串)
而不是这个,
[('CLIENT_ID','123456'), ('AUTO_COMMIT', 'False'), ('BROKER_URL', 'http://foo.bar')]