Python: 3.7+
我有一个数据类和它的一个子类如下:
from abc import ABC
from dataclasses import dataclass
from typing import Dict, List, Optional
from dbconn import DBConnector
@dataclass
class User:
uid: int
name: str
@dataclass
class Model(ABC):
database: DBConnector
user: User
def func(self, *args, **kwargs):
pass
@dataclass
class Command(Model):
message: Optional[str] = "Hello"
def __post_init__(self):
self.user_id: str = str(self.user.uid)
self.message = f"{self.user.name}: {self.message}"
我可以使用
typing.get_type_hints(Command)
获取database
,user
和message
的类型提示。如何获取user_id
的类型提示?一种解决方法是将
user.uid
和user.name
作为单独的参数传递给Command
,但当User
对象具有许多有用的属性时,这不是实用的。我认为之所以一开始无法正常工作是因为在运行时调用了
__init__
,这就是为什么类型检查没有考虑这些属性的原因。一个可能的解决方案是解析类的AST,但我不确定这是否被推荐并且足够通用。如果是,请提供一个可用的示例。
__post_init__
之外“声明”它呢? - DeepSpace