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中类型检测的两种方法的主要内容,如果未能解决你的问题,请参考以下文章

这个 Python 类型提示语法是啥,括号中的两种类型?

python遍历数组的两种方法的代码

python 取整的两种方法

python连接redis的两种方法

python将两个数组合并成一个数组的两种方法的代码

Python输出换行的两种方法