type()

type()函数用于判断对象类型:

>>> type(11)
<class 'int'>
>>> type('abc')
<class 'str'>
>>> type(None)
<class 'NoneType'>
>>> type(abs)
<class 'builtin_function_or_method'>
>>> type(a)
<class 'list'>

type()返回的是对应class类型。下面是判断两个变量的type类型是否相同:

>>> type(11) == type(22)
True
>>> type('abc') == str
True
>>> type('abc') == type(33)
False

如何判断一个对象是否是函数呢?使用types模块中定义的常量:

>>> import types
>>> def f():
... pass
...
>>> type(f)
<class 'function'>
>>> type(f) == types.FunctionType
True
>>> type(lambda x:x) == types.LambdaType
True
>>> type((x for x in range(10))) == types.GeneratorType
True

isinstance()

如果存在以下继承关系:object->Animal->Dog->Husty

那么,isinstance()可以告诉我们,一个对象是否是某种类型(续用上篇文章的例子):

>>> class Husty(Dog):
... pass
...
>>> a = Animal()
>>> b = Dog()
>>> c = Husty()
>>> isinstance(c,Husty)
True
>>> isinstance(c,Dog)
True
>>> isinstance(c,Animal)
True
>>> isinstance(b,Husty)
False

我们可以说Husty是Husty、Dog、Animal类型的对象,却不能说Dog是Husty的对象。应该不难理解吧。

isinstance()同样可以用来判断基本数据类型,甚至可以判断一个变量是否是某些类型中的一种:

>>> isinstance('abc',str)
True
>>> isinstance(22,int)
True
>>> isinstance([1,2,3,4],(list,tuple))
True
>>> isinstance((1,2,3,4),(list,tuple))
True

dir()

用于获取一个对象的所有方法和属性。返回值是一个包含字符串的list:

>>> dir('abc')
['__add__', '__class__',…… '__hash__', '__init__', '__i
……'isalnum
'isidentifier', 'islower', …… 'translate', 'upper', 'zfill']

其中,类似__xx__的属性和方法都是有特殊用途的。如果调用len()函数视图获取一个对象的长度,其实在len()函数内部会自动去调用该对象的__len__()方法,等价于:

>>> len('abc')
3
>>> 'abc'.__len__()
3

据此,我们自己在定义类的时候,自己写一个__len__()方法,就可以使用len(实例变量)功能:

>>> class MyObj(object):
... def __len__(self):
... return 55
...
>>> obj = MyObj()
>>> len(obj)
55

往往我们仅仅列出属性和方法还是不够的,配合getattr()、setattr()、hasattr(),我们可以直接操作一个对象的状态:

>>> class MyObj(object):
... def __init__(self):
... self.x = 9
... def power(self):
... return self.x * self.x
...
>>> obj = MyObj()
>>> hasattr(obj,'x')
True
>>> obj.x
9
>>> hasattr(obj,'y')
False
>>> setattr(obj,'y',22)
>>> hasattr(obj,'y')
True
>>> obj.y
22
>>> getattr(obj,'y')
22

还可以传入一个默认参数,如果属性不存在,返回默认值:

>>> getattr(obj,'h','该页面不存在')
'该页面不存在'

再来演示如何获得对象的方法:

>>> hasattr(obj,'power')
True
>>> f = getattr(obj,'power')
>>> f
<bound method MyObj.power of <__main__.MyObj object at 0x029FD250>>
>>> f()
81

Python面向对象-获取对象信息type()、isinstance()、dir()的更多相关文章

  1. python 面向对象五 获取对象信息 type isinstance getattr setattr hasattr

    一.type()函数 判断基本数据类型可以直接写int,str等: >>> class Animal(object): ... pass ... >>> type( ...

  2. python基础——获取对象信息

    python基础——获取对象信息 当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type( ...

  3. Python面向对象 -- 继承和多态、获取对象信息、实例属性和类属性

    继承和多态 继承的好处: 1,子类可以使用父类的全部功能 2,多态:当子类和父类都存在相同的方法时,子类的方法会覆盖父类的方法,即调用时会调用子类的方法.这就是继承的另一个好处:多态. 多态: 调用方 ...

  4. python 面向对象编程、获取对象信息

    面向对象与面向过程 参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0 ...

  5. python 获取对象信息

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型.有哪些方法呢? 使用type() 首先,我们来判断对象类型,使用type()函数: 基本类型都可以用type()判断: >>> ...

  6. 【Python】[面性对象编程] 获取对象信息,实例属性和类属性

    获取对象信息1.使用isinstance()判断class类型2.dir() 返回一个对象的所有属性和方法3.如果试图获取不存在的对象会抛出异常[AttributeError]4.正确利用对象内置函数 ...

  7. python获取对象信息

    获取对象信息 拿到一个变量,除了用 isinstance() 判断它是否是某种类型的实例外,还有没有别的方法获取到更多的信息呢? 例如,已有定义: class Person(object): def ...

  8. python类的继承和多态,获取对象信息

    继承 类的继承机制使得子类可以继承父类中定义的方法,拥有父类的财产,比如有一个Animal的类作为父类,它有一个eat方法: class Animal(object): def __init__(se ...

  9. python动态获取对象的属性和方法 (转载)

    首先通过一个例子来看一下本文中可能用到的对象和相关概念. #coding:utf-8 import sys def foo():pass class Cat(object): def __init__ ...

随机推荐

  1. Linux -- 进程管理之 fork() 函数

    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己. Test1 f ...

  2. Java核心技术第八章-泛型

    摘要 本文根据<Java核心技术 卷一>一书的第八章总结而成,部分文章摘抄书内,作为个人笔记. 文章不会过于深入,望读者参考便好. 为什么要使用泛型程序设计 泛型程序设计(Generic ...

  3. centos7忘记root密码的重置方法-超简单

    忘记root密码,重置root密码8步. 1.在开机界面按e进入grub编辑模式 2.找到 ro修改为rw /sysroot/bin/sh 3.Ctrl + x 启动 4.chroot /sysroo ...

  4. attach()与detach()的使用

    attach()与detach()需要配对使用,如果使用了attach而未使用detach,再次使用attach时,会有"对象被屏蔽"的问题,如下:

  5. synchronized被这么问,谁能受得了

    synchronized是面试中经常会被问到的知识点,相关的问题点也很多,问题答案涉及的知识点也很多,有经验的面试官就会顺着你的答案不断追问一下,下面的对话场景就是相关面试题的连环炮. 面试官:说一下 ...

  6. 模板引擎Thymeleaf

    1.Thymeleaf简介 Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下三个极吸引人的特点 Thyme ...

  7. js练习-两个栈实现队列

    目录 题 解 题 现在有个Q队列和栈A,栈B,栈只有两个方法,push()和pop(), 队列也只有两个方法,push()和pull(),队列的进和出都只能通过A和B的push和pop实现. // 大 ...

  8. Nginx(http协议代理 搭建虚拟主机 服务的反向代理 在反向代理中配置集群的负载均衡)

    Nginx 简介 Nginx (engine x) 是一个高性能的 HTTP 和反向代理服务.Nginx 是由伊戈尔·赛索耶夫为俄罗斯访问量第二的 Rambler.ru 站点(俄文:Рамблер)开 ...

  9. Python获取 bing 地图发布自己的 TMS 服务(二)解决海量瓦片存取问题

    金字塔结构的瓦片数量有多大 以目前互联网常用的WebMecator为例 第一层:4幅256*256影像瓦片(JPG或PNG等) 第二层:42 第三层:43 依次类推比如计算第1层至第18层的瓦片总数目 ...

  10. AutoCAD中的螺旋究竟是什么螺旋?

    AutoCad从很早的时候就开始提供了螺旋线的功能,它的用法相对简单,非常适合用来对等距螺旋的理论进行演练. 选择螺旋线工具,首先画出一个基准圆,再向内(或向外)移动鼠标,拖出一个旋转3个周期的螺旋. ...