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))
Python-判断变量类型和继承链-type isinstance的更多相关文章
- [Python]判断变量类型是否为List列表
用法:isinstance(变量,list) li = [1,2,3] print(type(li)) if isinstance(li,list): print("This is a Li ...
- JavaScript 变量克隆和判断变量类型
一.变量克隆 在js中经常会遇到将一个变量赋值给一个新的变量这种情况,这对于基本类型很容易去实现,直接通过等号赋值就可以了,对于引用类型就不能这样了.(注:像函数,正则也可以直接通过等号赋值) 这里我 ...
- Javascript 判断变量类型的陷阱 与 正确的处理方式
Javascript 由于各种各样的原因,在判断一个变量的数据类型方面一直存在着一些问题,其中最典型的问题恐怕就是 typeof null 会返回 object 了吧.因此在这里简单的总结一下判断数据 ...
- PHP判断变量类型和类型转换的三种方式
前言: PHP 在变量定义中不需要(不支持)明确的类型定义.变量类型是根据使用该变量的上下文所决定的.所以,在面对页码跳转.数值计算等严格的格式需求时,就要对变量进行类型转换. 举例如下: $foo ...
- php判断变量类型
php判断变量类型 一.总结 一句话总结: gettype()函数:gettype(1);返回的是integer is_array():is系列函数 1.PHP empty.isset.isnull的 ...
- python 判断变量是否存在 防止报错
Python判断变量是否存在 方法一:使用try: ... except NameError: .... try: var except NameError: var_exists = False e ...
- python的变量类型(Day6)
Python的变量类型 变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符. 变量赋值 Python 中的变量赋值不需要类型声明 等号(=)用来给变量赋值,等号左边为变量值,等号右边是存储在 ...
- 16. js 判断变量类型,包括ES6 新类型Symbol
相信大家在开发中遇到需要判断变量类型的问题,js变量按存储类型可分为值类型和引用类型,值类型包括Undefined.String.Number.Boolean,引用类型包括object.Array.F ...
- 【Python】Python—判断变量的基本类型
type() >>> type(123)==type(456) True >>> type(123)==int True >>> type('ab ...
随机推荐
- Gradle Wrapper
Gradle Wrapper 当把本地一个项目放入到远程版本库的时候,如果这个项目是以gradle构建的,那么其他人从远程仓库拉取代码之后如果本地没有安装过gradle会无法编译运行,如果对gradl ...
- SpringCloud Alibaba Nacos 服务治理中心
目录 一.什么是Nacos? 二.Nacos能干吗? 三.Nacos关键特性 四.Nacos中的基本概念 五.如何安装部署Nacos? 六.Nacos数据持久化 一.什么是Nacos? 英文全称Dyn ...
- 经典DP动规 0-1背包问题 二维与一维
先上代码 b站讲解视频 灯神讲背包 #include <iostream> #include <cstring> #include <algorithm> usin ...
- Android Studio从Eclipse导项目
要是你只下了Android Studio 就不能用Eclipse导出gradle项目了 可以直接使用Android Studio导入模块,在Android Studio里Project算Eclipse ...
- 终于开始了,微软的野心将通过全场景开发平台dotnet 5体现得淋漓尽致!
本文已经同步到微信公众号「极客起源」 . 现在都在谈论全场景开发,也就是用一套开发工具,可以开发包括但不限于桌面.移动.IOT.游戏.Web等平台的应用.这样对于开发人员是非常爽的.本文将介绍微软 ...
- C#中SQL Server的几点注意事项
背景 在C#中处理sql会遇到一些奇怪的问题,在这里做一个小的总结,内容会随着经历不断积累. 内容 1.DataTime?和DataTime的区别. DataTime?定义的数据为可空类型,允许其为 ...
- mysql 5.7密码策略和安装密码校验插件validate_password
当执行sql:SHOW VARIABLES LIKE 'validate_password%';提示empty,说明没有安装密码插件 1.查看当前mysql安装的插件信息 mysql> show ...
- sql注入 --显错注入
前提知识 数据库:就是将大量数据把保存起来,通过计算机加工而成的可以高效访问数据库的数据集合数据库结构:库:就是一堆表组成的数据集合表:类似 Excel,由行和列组成的二维表字段:表中的列称为字段记录 ...
- 2. 构建DNS集群
DNS是什么 DNS(Domain Name System,域名系统),是互联网上存储域名和IP映射关系的一个分布式数据库,他负责把域名转换为IP地址,或IP转换为域名,工作于OSI应用层之上,DNS ...
- [LeetCode] 337. 打家劫舍 III (树形dp)
题目 在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区.这个地区只有一个入口,我们称之为"根". 除了"根"之外,每栋房子有且只有一个&q ...