美文网首页
26. OOP-获取对象信息

26. OOP-获取对象信息

作者: 牛崽儿酷 | 来源:发表于2016-07-15 15:09 被阅读0次

当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢?

使用type()

>>> type(123)
<class 'int'>
>>> type('str')
<class 'str'>
>>> type(None)
<type(None) 'NoneType'>
>>> type(abs)
<class 'builtin_function_or_method'>
>>> type(a)
<class '__main__.Animal'>

判断基本数据类型可以直接写int,str等,但如果要判断一个对象是否是函数怎么办?可以使用types模块中定义的常量:
>>> import types
>>> def fn():
... pass...
>>> type(fn)==types.FunctionType
True
>>> type(abs)==types.BuiltinFunctionType
True
>>> type(lambda x: x)==types.LambdaType
True
>>> type((x for x in range(10)))==types.GeneratorType
True

使用isinstance()

对于class的继承关系来说,使用type()就很不方便。我们要判断class的类型,可以使用isinstance()函数。
我们回顾上次的例子,如果继承关系是:object -> Animal -> Dog -> Husky 那么,isinstance()就可以告诉我们,一个对象是否是某种类型。先创建3种类型的对象:

>>> a = Animal()
>>> d = Dog()
>>> h = Husky()

然后,判断:
>>> isinstance(h, Husky)
True
>>> isinstance(h, Dog)
True

h虽然自身是Husky类型,但由于Husky是从Dog继承下来的,所以,h也还是Dog类型。换句话说,isinstance()判断的是一个对象是否是该类型本身,或者位于该类型的父继承链上

还可以判断一个变量是否是某些类型中的一种,比如下面的代码就可以判断是否是list或者tuple:
>>> isinstance([1, 2, 3], (list, tuple))
True
>>> isinstance((1, 2, 3), (list, tuple))
True

使用dir()

如果要获得一个对象的所有属性和方法,可以使用dir()函数,它返回一个包含字符串的list,比如,获得一个str对象的所有属性和方法:
>>> dir('ABC')
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']

类似__xxx__的属性和方法在Python中都是有特殊用途的,比如__len__方法返回长度。在Python中,如果你调用len()函数试图获取一个对象的长度,实际上,在len()函数内部,它自动去调用该对象的__len__()方法,所以,下面的代码是等价的:
>>> len('ABC')
3
>>> 'ABC'.__len__()
3

仅仅把属性和方法列出来是不够的,配合getattr()、setattr()以及hasattr(),我们可以直接操作一个对象的状态
可以传入一个default参数,如果属性不存在,就返回默认值:
>>> getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404
404

也可以获得对象的方法:
>>> hasattr(obj, 'power') # 有属性'power'方法吗?
True

相关文章

  • 26. OOP-获取对象信息

    当我们拿到一个对象的引用时,如何知道这个对象是什么类型、有哪些方法呢? 使用type() >>> type(123...

  • 003_OOP的概念学习

    OOP-面向对象编程,核心概念:对象,类,继承,接口,软件包。 对象(Object) An object is a...

  • 获取对象信息

    使用type() 判断基本数据类型可以直接写int,str等,但如果要判断一个对象是否是函数怎么办?可以使用typ...

  • 获取对象信息

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

  • 获取对象信息

    获取对象信息: 使用type() type():判断对象类型 type(任意类型参数) >>> 返回参数类型 ...

  • 获取对象信息

    一、type() 和 types 二、isinstance() isinstance()应该优先使用,更方便 如继...

  • 使用window对象

    获取window对象 获取窗口信息 screen 对象 窗口进行交互 对用户进行提示 获取基本信息 history...

  • 简单记忆_JSP九大内置对象_四大域对象

    九大内置对象 request 请求对象可以获取请求的信息 response 响应对象可以获取设置响应的信息 pag...

  • python 获取对象信息

    1、type() 2、isinstance() a = Animal()d = Dog()h = Husky() ...

  • python基础: 使用频繁的内建帮助函数

    help() 获取指定对象的帮助信息 dir() 获取指定对象的属性和方法 id() 获取指定对象的内存地址 ty...

网友评论

      本文标题:26. OOP-获取对象信息

      本文链接:https://www.haomeiwen.com/subject/fuuyjttx.html