在很多情况下,需要对类型进程动态判断,因为不同的数据类型不能互相做运算并且各自拥有不同的运算逻辑,所有需要判断对象的类型,常用的是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))

  

  

Python-判断变量类型和继承链-type isinstance的更多相关文章

  1. [Python]判断变量类型是否为List列表

    用法:isinstance(变量,list) li = [1,2,3] print(type(li)) if isinstance(li,list): print("This is a Li ...

  2. JavaScript 变量克隆和判断变量类型

    一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...

  3. Javascript 判断变量类型的陷阱 与 正确的处理方式

    Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...

  4. PHP判断变量类型和类型转换的三种方式

    前言: PHP 在变量定义中不需要(不支持)明确的类型定义.变量类型是根据使用该变量的上下文所决定的.所以,在面对页码跳转.数值计算等严格的格式需求时,就要对变量进行类型转换. 举例如下: $foo ...

  5. php判断变量类型

    php判断变量类型 一.总结 一句话总结: gettype()函数:gettype(1);返回的是integer is_array():is系列函数 1.PHP empty.isset.isnull的 ...

  6. python 判断变量是否存在 防止报错

    Python判断变量是否存在 方法一:使用try: ... except NameError: .... try: var except NameError: var_exists = False e ...

  7. python的变量类型(Day6)

    Python的变量类型 变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符. 变量赋值 Python 中的变量赋值不需要类型声明 等号(=)用来给变量赋值,等号左边为变量值,等号右边是存储在 ...

  8. 16. js 判断变量类型,包括ES6 新类型Symbol

    相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...

  9. 【Python】Python—判断变量的基本类型

    type() >>> type(123)==type(456) True >>> type(123)==int True >>> type('ab ...

随机推荐

  1. 一文带你深扒ClassLoader内核,揭开它的神秘面纱!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! 前言 Clas ...

  2. ssm框架之springMVC拦截器

    1拦截器概述 1.1什么是拦截器? springMVC中的拦截器(Interceptor)类似于servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以进行权 ...

  3. python接口测试自动化之python基础语法

    一.pycharm的使用和python基本语法 (一).pycharm的使用和python环境 1.python以及pycharm的安装 python 的版本选择:3.x 版本,不要安装2.x 版本, ...

  4. APP重构之路:引入单元测试

    一.为什么要引入单元测试 在开发过程中我们会遇到这样一些问题: 面对需要重构庞大的模块代码时无从下手 修改了一处地方却在另一处地方引发了新的bug 扩展新功能的同时导致旧代码出现bug 在测试人员难以 ...

  5. VUE响应式原理-如何追踪变化

    Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是普通的 JavaScript 对象.而当你修改它们时,视图会进行更新.这使得状态管理非常简单直接 如何追踪变化 当你把一个普通的 Ja ...

  6. 【小白学PyTorch】4 构建模型三要素与权重初始化

    文章目录: 目录 1 模型三要素 2 参数初始化 3 完整运行代码 4 尺寸计算与参数计算 1 模型三要素 三要素其实很简单 必须要继承nn.Module这个类,要让PyTorch知道这个类是一个Mo ...

  7. Android开发java程序员常用代码,将字符串以逗号分别取出字符串String

    public class StringSplit { public static void main(String[] args) { String sourceStr = "1,2,3,4 ...

  8. RabbitMQ 3.8.7 在 centos7 上安装

    1.安装 erlang 因为 RabbitMQ 是 erlang 语言开发,所以需要依赖 erlang 环境,所以在安装 RabbitMQ 前需要先安装 erlang wget https://pac ...

  9. CTF常见源码泄漏总结

    .hg源码泄漏 漏洞成因: hg init的时候会生成.hge.g.http://www.am0s.com/.hg/ 漏洞利用:工具:dvcs-ripperrip-hg.pl -v -u http:/ ...

  10. 《Offer一箩筐》求职之前你必须知道的 4 件事!!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...