Python面向对象 | isinstance和issubclass
isinstance(a,b):判断a是否是b类(或者b类的基类)实例化的对象
class A:
pass
class B(A):
pass
obj = B()
print(isinstance(obj,B)) # True
print(isinstance(obj,A)) # True
issubclass(a,b): 判断a类是否是b类(或者b的基类)的派生类
class A:
pass
class B(A):
pass
class C(B):
pass
print(issubclass(B,A)) # True
print(issubclass(C,A)) # True
# issubclass(子类名,父类名) 如果返回True,说明有继承关系
思考:那么 list str tuple dict等这些类与 Iterble类 的关系是什么?
from collections.abc import Iterable print(isinstance([1,2,3], list)) # True print(isinstance([1,2,3], Iterable)) # True print(issubclass(list,Iterable)) # True # 由上面的例子可得,这些可迭代的数据类型,list str tuple dict等 都是 Iterable的子类。
isinstance() 与 type() 区别:
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()
a = 2 print(isinstance (a,int)) # 判断是否为整形 True
判断继承关系
class A:pass class B:pass class A(B):pass a = A() print(isinstance(a,A)) print(isinstance(a,B)) # 能够检测到继承关系 print(type(a) is A) print(type(a) is B) # type 只单纯的判断类型 ''' 执行输出: True True True False '''
isinstance判断一个对象和一个类有没有血缘关系. 这2个方法,不常用
内置的东西,都和内置的方法有着千丝万缕的联系
当一个对象拥有__len__方法时,就可以使用len()方法时。
想要__len__有实际意义,统计属性的个数
class A:
def __init__(self,name,age,sex,cls):
self.name = name
self.age = age
self.sex = sex
self.cls = cls
def __len__(self): # 添加__len__方法
return len(self.__dict__) # 通过__dict__方法,可以查看对象的属性
a1 = A('Tony',81,'不详',2)
a1.hobby = '理发'
a2 = A('John',20,'不详',3)
a3 = A('Linda',21,'不详',4)
print(len(a1))
print(len(a2))
print(len(a3))
'''
执行输出:
5
4
4
'''
一个对象,能不能hash, 靠一个内置方法__hash__决定的
class A:
def __init__(self,name,age,sex,cls):
self.name = name
self.age = age
self.sex = sex
self.cls = cls
a = A('Tony', 81, '男', 2)
print(hash(a)) # -9223371925907897960
a对象之所以可以hash,是靠object类来完成的。由于python3所有类都继承了object类
可以自己定义个__hash__方法
class A:
def __init__(self,name,age,sex,cls):
self.name = name
self.age = age
self.sex = sex
self.cls = cls
def __hash__(self):
return 0
a1 = A('Tony',81,'男',2)
Python面向对象 | isinstance和issubclass的更多相关文章
- python补漏----isinstance 和 issubclass
一.isinstance Python 中的isinstance函数 isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo) 如果参数o ...
- python 面向对象 isinstance
查看某个对象是否 这个类实例 是返回True 否则返回False class Foo(object): pass obj = Foo() class Boo(object): pass print(i ...
- Python面向对象05 /私有成员、类方法、静态方法、属性、isinstance/issubclass
Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubclass 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/is ...
- python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass
https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...
- python基础语法17 面向对象4 多态,抽象类,鸭子类型,绑定方法classmethod与staticmethod,isinstance与issubclass,反射
多态 1.什么是多态? 多态指的是同一种类型的事物,不同的形态. 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字). 多 ...
- python_way,day8 面向对象【多态、成员--字段 方法 属性、成员修饰符、特殊成员、异常处理、设计模式之单例模式、模块:isinstance、issubclass】
python_way day8 一.面向对象三大特性: 多态 二.面向对象中的成员 字段.方法属性 三.成员修饰符 四.特殊成员 __init__.__doc__.__call__.__setitem ...
- python 全栈开发,Day23(复习,isinstance和issubclass,反射)
一.复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print ...
- 面向对象之(非)绑定方法,反射,isinstance与issubclass
isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查obj是否是类 cls 的对象 class Foo(object): pa ...
- python基础----isinstance(obj,cls)和issubclass(sub,super)、反射、__setattr__,__delattr__,__getattr__、二次加工标准类型(包装)
一.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否ob ...
随机推荐
- vue组件component没效果
如果实在不知道问题所在,你就看看你的component的命名是不是驼峰命名
- pipeline 多个参数如何传入
1.准备一个json文件 { "NAME" : "Lucy", ", ", "ADDRESS" ...
- 【MySQL】Mariadb字符集
Mariadb字符集 如果不设置字符集,可以查看mariadb的字符集的默认设置是latin1. 如下命令,查看Mariadb的默认配置: [root@oradb ~]# /usr/local/mys ...
- RAID(独立磁盘冗余阵列)简介
RAID(独立磁盘冗余阵列) 在大数据技术出现之前,人们就需要面对这些关于存储的问题,对应的解决方案就是RAID技术. RAID(独立磁盘冗余阵列)技术主要是为了改善磁盘的存储容量,读写速度,增强磁盘 ...
- USE11 上oracle11导入数据中文乱码
分类专栏: 数据库 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/suqimm/artic ...
- 让你的 vs code 跑在云上,用手机浏览器就能写代码
让你的vs code 跑在云服务器上 在B站上看到一个视频Run VS Code in the browser with massive computing resources(教你如何配置一个云ID ...
- Asp.NetCoreWebApi - RESTful Api
目录 参考文章 REST 常用http动词 WebApi 在 Asp.NetCore 中的实现 创建WebApi项目. 集成Entity Framework Core操作Mysql 安装相关的包(为X ...
- 洛谷 P1002过河卒
洛谷 P1002过河卒 题目描述 棋盘上AA点有一个过河卒,需要走到目标BB点.卒行走的规则:可以向下.或者向右.同时在棋盘上CC点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点 ...
- JDK10、JDK11、JDK12新特性
JDK10新特性 1.var声明变量 很多人抱怨Java是一种强类型,需要引入大量的样板代码.甚至在这些情况下,给定好变量名,通常很清楚发生了什么,明显类型声明往往被认为是不必要的.许多流行的编程语言 ...
- Delphi中窗体的事件
Delphi中窗体的事件 Form窗体可以响应各种各样的时间,在Object Inspector的Events页面中罗列了一大堆,如下图: 下面将要列出一些常用的事件. 1.OnActivate 当窗 ...