Python-判断变量类型和继承链-type isinstance

  在很多情况下,需要对类型进程动态判断,因为不同的数据类型不能互相做运算并且各自拥有不同的运算逻辑,所有需要判断对象的类型,常用的是type和isinstance,type更过用于获取对象是什么类型构建的,而isinstance可以判断对象是否继承某个类或对象是否是多个类型中的一个。

变量类型判断

  type      只能一次判断一种类型,核心是判断实例对象是由什么类型构建

  isinstance    可以判断一种类型也可以判断多种类型,同时还可以判断继承链

__author_ = "北门吹雪"
__blog__ = "http://www.cnblogs.com/2bjiujiu/"
__email__ = "422083556@qq.com"


def check_type(value):
    """使用isinstance判断变量单个类型"""
    # 判断变量单个类型,如果是则返回其类型对应的字符
    if isinstance(value, int):
        return "int"
    elif isinstance(value, float):
        return "float"
    elif isinstance(value, bool):
        return "bool"
    elif isinstance(value, str):
        return "str"
    elif isinstance(value, list):
        return "list"
    elif isinstance(value, tuple):
        return "tuple"
    elif isinstance(value, set):
        return "set"
    elif isinstance(value, dict):
        return "dict"
    # 如果都不是则返回不知道
    else:
        return "Unknow Type of {value}".format(value=value)


def check_object(value):
    """使用instance同时判断多个类型"""
    # 判断变量是否是数字类型
    if isinstance(value, (int, float, bool)):
        return "number"
    # 判断变量是否有序序列
    elif isinstance(value, (str, list, tuple)):
        return "Ordered sequence"
    # 判断变量是否是无序序列
    elif isinstance(value, (set, dict)):
        return "Disordered sequence"
    else:
        return "Unknow Object of {value}".format(value=value)


def use_type(value):
    """type只能判断变量单个类型,也可以通过 or来进行折中解决"""
    if type(value) == int:
        return "int"
    elif type(value) == float:
        return "float"
    else:
        return "Unknow Type of {value}".format(value=value)


if __name__ == '__main__':
    print(check_type(10))
    print(check_type("10"))

    print(check_object((1, 3, 5)))
    print(check_object({2, 5, 6}))

    print(use_type(10))
    print(use_type((1, 3)))

判断继承链

class Person(object):
    def __init__(self, skin, language):
        self.skin = skin
        self.language = language


class Student(Person):
    def __init__(self,skin, language, name, sex, age, phone_number):
        # 继承使用父类的析构字段
        super(Student, self).__init__(skin=skin, language=language)
        self.name = name
        self.sex = sex
        self.age = age
        self.phone_number = phone_number


if __name__ == '__main__':
    beimenchuixue = Student("yellow", "zh-hans", "xiaoMing", "male", 18, "15570911036")
    # 判断实例xia_ming是否继承于 Persion
    print(isinstance(beimenchuixue, Person))

    print(beimenchuixue.skin)

判断实例对象由什么类型构成

class Class(object):
    def __init__(self, student_names):
        self.student_names = student_names

    def __getitem__(self, item):
        return self.student_names[item]


python_class = Class(["QiNiuYun", "BeiMenChuiXue", "AliYun", "BaiDu"])

print(type(python_class))
print(type(int))
print(type(object))
print(type(type))

  

  

原文地址:https://www.cnblogs.com/2bjiujiu/p/9062139.html