Python:运行时参数类型提示



是否可以在运行时检查参数类型提示?我想以类似于Scala案例类的方式使用Python数据类,并使用pureconfig和HOCON配置文件。也就是说,我希望有一些可选参数,但需要在另一个类构造函数中检查它们。但是,我不知道如何获取参数是否是可选的。

from dataclasses import dataclass
from typing import Optional
@dataclass
class Params:
x: int
y: int
z: Optional[int] = None

params = Params(x=2, y=3)

假设我想在某个地方使用数据类Params。如果我检查z,我将得到NoneType。如果我知道这个设计,也许我可以忽略任何错误。

# just some example code 
if z is None and z is not Optional (not sure if or how to check this):
raise ValueError("z must be specified as an integer")
if z is None and z is optional:
return x ** 2 + y ** 2
elif z is not None:
return x ** 2 + y ** 2 + z ** 2

见下。我们的想法是使用__post_init__并检查z的注释。取消注释#z: int,看看它是如何工作的。

from dataclasses import dataclass
from typing import Optional

@dataclass
class Params:
x: int
y: int
z: Optional[int] = None
#z: int
def __post_init__(self):
print('post init')
if self.z is None:
z_annotation = self.__annotations__['z']
none_is_ok = False
args = z_annotation.__dict__.get('__args__')
if args is not None:
for entry in args:
none_is_ok = entry == type(None)
if none_is_ok:
break
if not none_is_ok:
raise ValueError('z can not be None')

p: Params = Params(3, 5, None)
print(p)

相关内容

  • 没有找到相关文章

最新更新