yangcctv 发表于 2018-8-6 13:21:09

python高级之描述器

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)
页: [1]
查看完整版本: python高级之描述器