我已经定义了此数据类:
import logging
from config.config_parser import ConfigParser
from dataclasses import dataclass
@dataclass
class A:
id_execution: int
flag: bool
log: str = logging.getLogger('log_handler')
con: str = ConfigParser.get_conf('A', 'a_value')
name: str = None
surname: str = None
此数据类正在其他“传统”类中调用,例如:
from handlers.handler_a import A
from config.config_parser import ConfigParser
# Configuration initialization
ConfigParser.initialize_config()
# Instantiate A dataclass
a = A()
ConfigParser失败,因为它没有初始化。似乎在上述导入中将A初始化为configParser和其他所有内容。
这怎么可能?我在做错什么吗?
预先感谢
答案 0 :(得分:0)
A
不会在导入时初始化,但是所有这些A'类变量都将被赋值,因此将执行赋值的右侧,例如ConfigParser.get_conf('A', 'a_value')
。
如果使这些变量成为实例级变量(通过将其声明放在__init__
中),则将在调用该a = A()
时对它们进行分配。
答案 1 :(得分:0)
A
时调用 class A:
def __init__(self):
self.con = ConfigParser.get_conf('A', 'a_value')
,这就是失败的原因。在正常的课堂上,这将被编写为
get_conf
和field
仅在创建实例时被调用。
我们可以通过使属性为default_factory
和@dataclass
class A:
id_execution: int
flag: bool
log: str = logging.getLogger('log_handler')
con: str = field(default_factory=lambda: ConfigParser.get_conf('A', 'a_value'))
name: str = None
surname: str = None
来告诉数据类做同样的事情:
导入日志 从config.config_parser导入ConfigParser 从数据类导入数据类,字段
let fooJson = {
"user": {
"level": "admin",
"_id": "5da89",
"email": "admin@admin.net",
"password": "soinggdfgsd",
"tokens": "17T12:59:04.751Z",
"__v": 40
},
"token": "something"
};
console.log(`user is ${fooJson.user.level}`);
console.log(`_id is ${fooJson.user._id}`);
console.log(`email is ${fooJson.user.email}`);
console.log(`password is ${fooJson.user.password}`);
console.log(`tokens is ${fooJson.user.tokens}`);