导入时调用数据类(?)

时间:2019-10-21 10:33:12

标签: python python-3.x python-dataclasses

我已经定义了此数据类:

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和其他所有内容。

这怎么可能?我在做错什么吗?

预先感谢

2 个答案:

答案 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}`);