------------恢复内容开始------------
Python和js相似是弱类型语言,对变量赋值没有没有严格意义限制;
以下通过修饰符以及装饰器来实现对用户数据进行类型校验;
装饰器定义好类的属性类型,实例化时会在装饰器中校验People的name类型以及age类型
1 """ 2 修饰符:实现 __get__() __set()__ __delete()__任意一个函数 3 """ 4 5 6 class Typed: 7 def __init__(self, key, valid_type): 8 self.key = key 9 self.valid_type = valid_type 10 11 def __get__(self, instance, owner): 12 return instance.__dict__[self.key] 13 14 def __set__(self, instance, value): 15 if not isinstance(value, self.valid_type): 16 raise TypeError('Invalid data type, pls check') 17 instance.__dict__[self.key] = value 18 19 20 def deco(**kwargs): 21 def wrapper(obj): 22 for key, val in kwargs.items(): 23 setattr(obj, key, Typed(key, val)) 24 return obj 25 return wrapper 26 27 28 @deco(name=str, age=int) 29 class People: 30 # name = Typed('name', str) 31 def __init__(self, name, age): 32 self.name = name 33 self.age = age 34 35 36 p1 = People('louis', 18) 37 print(p1.__dict__) # {'name': 'louis', 'age': 18} 38 p2 = People('scar', '24') # TypeError: Invalid data type, pls check
------------恢复内容开始------------
Python和js相似是弱类型语言,对变量赋值没有没有严格意义限制;
以下通过修饰符以及装饰器来实现对用户数据进行类型校验;
装饰器定义好类的属性类型,实例化时会在装饰器中校验People的name类型以及age类型
1 """ 2 修饰符:实现 __get__() __set()__ __delete()__任意一个函数 3 """ 4 5 6 class Typed: 7 def __init__(self, key, valid_type): 8 self.key = key 9 self.valid_type = valid_type 10 11 def __get__(self, instance, owner): 12 return instance.__dict__[self.key] 13 14 def __set__(self, instance, value): 15 if not isinstance(value, self.valid_type): 16 raise TypeError('Invalid data type, pls check') 17 instance.__dict__[self.key] = value 18 19 20 def deco(**kwargs): 21 def wrapper(obj): 22 for key, val in kwargs.items(): 23 setattr(obj, key, Typed(key, val)) 24 return obj 25 return wrapper 26 27 28 @deco(name=str, age=int) 29 class People: 30 # name = Typed('name', str) 31 def __init__(self, name, age): 32 self.name = name 33 self.age = age 34 35 36 p1 = People('louis', 18) 37 print(p1.__dict__) # {'name': 'louis', 'age': 18} 38 p2 = People('scar', '24') # TypeError: Invalid data type, pls check
------------恢复内容结束------------
------------恢复内容结束------------