python中类型检测的两种方法
Posted 彡心如止水彡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中类型检测的两种方法相关的知识,希望对你有一定的参考价值。
1.使用描述符+类的装饰器
class Typed: def __init__(self,key,type): self.key=key self.type=type def __get__(self, instance, owner): return instance.__dict__[self.key] def __set__(self, instance, value): if not isinstance(value,self.type): raise TypeError("%s 不是%s" %(value,self.type)) instance.__dict__[self.key]=value def __delete__(self, instance): instance.__dict__.pop(self.key) def test(**kwargs): def test1(func): for i,o in kwargs.items(): setattr(func,i,Typed(i,o)) return func return test1 @test(name=str) class people: # name=Typed("name",str)#要设置类型 通过设置后可以不用这么麻烦可以直接修饰 # age=Typed("age",int) def __init__(self,name,age,salary): self.name=name self.age=age self.salary=salary s=people("rxy",123,123) print(s.name) print(people.__dict__)
2.使用property的补充
class People: def __init__(self,name): self.name=name #实例化就触发property @property def name(self): # return self.name #无限递归 print(‘get------>‘) return self.DouNiWan @name.setter def name(self,value): print(‘set------>‘) if not isinstance(value,str): raise TypeError(‘必须是字符串类型‘) self.DouNiWan=value @name.deleter def name(self): print(‘delete------>‘) del self.DouNiWan p1=People(‘alex‘) #self.name实际是存放到self.DouNiWan里 p1.name="1" print(p1.__dict__) print()
以上是关于python中类型检测的两种方法的主要内容,如果未能解决你的问题,请参考以下文章