|
import inspect
class Typed:
def __init__(self,tp):
self._tp = tp
def __get__(self,instance,owner):
pass
def __set__(self,instance,value):
if not isinstance(value,self._tp):
raise ValueError(value)
setattr(instance.__class__,self._name,value)
def pcheck(cls):
def wrapper(*args):
sig = inspect.signature(cls)
params = sig.parameters
for i,(name,param) in enumerate(params.items()):
if param.empty != param.annotation:
# if not isinstance(args,param.annotation):
# raise ValueError(args)
setattr(cls,name,Typed(param.annotation))
return cls(*args)
return wrapper
@pcheck
class A:
# a = Typed(str)
# b = Typed(int)
def __init__(self,a:str,b:int):
self.a = a
self.b = b
A('1',2) |
|
|