python中的获取对象信息

python中的获取对象信息,第1张

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

使用type():

首先,我们来判断对象类型,使用type()函数:

基本类型都可以用type()判断:

>>>type(223)

>>>type('m')

>>>type(None)

判断基本数据类型可以直接写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()就很不方便,可以使用isinstance()函数。

如果继承关系是:

Object->Animal->Dog->Husky

那么,isinstance()就可以告诉我们,一个对象是否是某种类型。先创建3种类型的对象

>>>a = Animal()

>>>d = Dog()

>>>h = Husky()

>>>isinstance(h,Husky)

True

>>>isinstance(h,Dog)

True

>>>isinstance(h,Animal)

True

isinstance()判断的是一个对象是否是该类型的本身,或者位于该类型的父继承链上。

能用type()判断的基本数据类型可以用isinstance()判断:

>>>isinstance('a',str)

True

>>>isinstance(123,int)

True

还可以判断一个变量是否是某种类型的一种

>>>isinstance([1,2,3],(list,tuple))

True

>>>isinstance((1,2,3),(list,tuple))

True

使用dir():

如果想要获得一个对象的所有属性和方法 可以使用dir()函数,它返回一个包含字符串的list

>>>dir('ABC')

['__add__',…………]

仅仅是把属性和方法列出来是不够的,配合getattr(),setattr()及hasattr(),我们可以直接 *** 作一个对象的状态。

>>>class MyObject (object):

def __init__(self):

  self.x = 9

def power(self):

   return self.x*self.x

>>>obj = MyObject()

现在,可以测试该对象的属性:

>>>hasattr(obj,'x')

True

>>>hasattr(obj,'y')

False

>>>setattr(obj,'y',20)

>>>hasattr(obj,'y')

True

>>>getattr(obj,'y')

20

如果获取不存在的属性,会抛出AttributeError错误

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

#获取属性'z',如果不存在,就返回默认值404

>>>getattr(obj,'z',404)

也可以获得对象的方法:

>>>hasattr(obj,'power')

True

 

 

 

 

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/873526.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存