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. 关于DOM的操作以及性能优化问题-重绘重排

     写在前面: 大家都知道DOM的操作很昂贵. 然后贵在什么地方呢? 一.访问DOM元素 二.修改DOM引起的重绘重排 一.访问DOM 像书上的比喻:把DOM和JavaScript(这里指ECMScri ...

  2. 【技术贴】Eclipse 右键打开当前文件所在文件夹

    1.使用插件,百度:OpenExplorer_1.5.0.v201108051513.jar 2.默认情况下使用eclipse打开当前文件所在文件夹很麻烦,需要右键点击 Package Explore ...

  3. max os 安装python模块PIL

    下载libjpeg和zlib: http://www.ijg.org/files/jpegsrc.v9.tar.gz http://zlib.net/zlib-1.2.8.tar.gz 安装libjp ...

  4. mojo 默认启用utf-8

    [root@dr-mysql01 ~]# cat f1.pl use Encode; print "验证111\n"; my $d=encode_utf8('验证'); print ...

  5. Python dict 按键和值排序

    python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行:1 下面的是按照value的值从大到小的顺序来排序. ...

  6. webMagic+RabbitMQ+ES爬取京东建材数据

    本次爬虫所要爬取的数据为京东建材数据,在爬取京东的过程中,发现京东并没有做反爬虫动作,所以爬取的过程还是比较顺利的. 为什么要用WebMagic: WebMagic作为一款轻量级的Java爬虫框架,可 ...

  7. Python科学计算库

    Python科学计算库 一.numpy库和matplotlib库的学习 (1)numpy库介绍:科学计算包,支持N维数组运算.处理大型矩阵.成熟的广播函数库.矢量运算.线性代数.傅里叶变换.随机数生成 ...

  8. POC iis短文件名

    __author__ = '*'# -*- coding:utf-8 -*- from lib.httpparse import httpparse def verify(protocol,ip,po ...

  9. 排序算法(sorting algorithm) 之 选择排序(selection sort)

    https://en.wikipedia.org/wiki/Selection_sort loop1: 4,6,1,3,7 -> 4,6,1,3,7 4,6,1,3,7 -> ,3,7 1 ...

  10. controller断点进入失败:包路径问题

    controller 接受前端参数的方法(前端要有传值给controller的方法,后台要有接收值得方法) 1.@RequestParam 接收表单参数 2.@RequestBody 接收json字符 ...