蟒蛇: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}"
我可以得到类型提示database
,user
并message
使用typing.get_type_hints(Command)
. 如何获得类型提示user_id
?
一种解决方法是将 user.uid 和 user.name 作为单独的参数传递给 Command,但是当 User 对象具有许多有用的属性时,这并不实用。
我相信它首先不起作用的原因是因为 init 在运行时被调用,这就是类型检查不考虑这些属性的原因。一种可能的解决方案是解析类的 ast,但我不确定这是否推荐和足够通用。如果是,将不胜感激一个工作示例。