python学习笔记-tip37(type()、isinstance()、dir()等方式获取对象信息)

type()


怎么判断某个对象的类型呢?
基本数据类型:int str float boolean等都可以直接用这些来判断,但是如果遇到一些“方法”等类型的话,就得需要用到

types模块中定义的常量

对于基本数据类型和list tuple set dict等都可以通过名称判断他们的类型
如下所示



但是如果我们要判断一个函数或者一个类的时候呢,这个时候就得需要用到types了

但是需要先导入types文件,如图

  import types
  #定义一个函数
  def  func():
        pass
  print(type(func)==types.FunctionType)
  print(type(abs)==types.BuiltinFunctionType)
  print(type(lambda x:x*x)==type.LambdaType)
  print((x for x in range(0,10))==types.GeneratorType))  

lambda 还不熟的同学请看我的“《匿名函数》的文章”
(x for x in range(0,10)还不熟的,请看我的《生成器》的文章
大致用法就是这样啦,我们看一下示例吧


types的用法就介绍到这里,接下来看isinstance()方法

isinstance()方法

因为等同于 java中的instanceof 所以

略....
接下来看下dir()函数

dir()

如果想获得一个对象的所有属性和方法,就需要用到dir(),他会返回一个包含着所有属性和方法的list
下面我们来看下str对象的所有属性和方法

    dir('abc')

感觉还真是不少呢...
其实到这里,获得对象信息的方法就介绍完了,但是由于看到dir()函数引出来了这么多属性和函数,在下面我们来看一看一些常用函数的作用吧

__xxx__格式的属性和函数在python中是有特殊用途的,比如__len__方法的作用是返回长度,我们可以使用len(对象)去拿到对象的长度,而len()函数的内部逻辑,就是调用了对象内部的__len__方法,所以下面两行操作是等价的

  len('abc')
  'abc'.__len__()

我们来看一下实际输出



结果是一样的哦

当然了,我们自己定义的类其实是没有__len__方法的,外界也就不能调用len()方法,但是如果我们想让外界调用的话,只需要提供一下就可以了

    class Student(object):
          def __len__(self):
                return 100
     s=Student()
     print(len(s))
     print(s.__len__())

请看示例


hasattr() getattr() setattr()三个关于属性的用法

看单词意思应该大致有个一二了
hasattr()即判断有无某属性
getattr()即获取对应属性值
setattr()即设置对应属性值
我们直接看示例吧

      #定义一个类
      class MyObject(object):
              def __init(self,name,age):
                    self.name=name
                    self.age=age
              def print_info(self):
                    print(self.name,self.age)
      obj=MyObject('xiaoming',5) 
      #判断由于name属性
      print(hasattr(obj,'name'))
      #判断由于age属性
      print(hasattr(obj,'age'))
      #获取name属性值
      print(getattr(obj,'name'))          

00.png

#设置name值,然后再获取
setattr(obj,'name','xiaohonghong')
print(getattr(obj,'name'))
#获取age值,如果没有则拿到默认值,有的话,则直接拿值
print(getattr(obj,'age',18))
#获取age值,如果没有则拿到默认值
print(getattr(obj,'myage',404))

我们来看下实际案例


当然了,如果没有要找的属性值或者方法的话,并且也没有定义默认值,那么就会报错



如图,爆出没有找到myname属性的错误

上面的例子是找属性,下面我们来试试找一找方法,同样,接着使用上面的MyObject类

    #打印print_info的属性类型
    print(getattr(obj,'print_info'))
    #将print_info这个方法赋值个fn
    fn=getattr(obj,'print_info')
    #通过fn去调用之前的这个方法
    fn()

总结

这些获得对象属性的方法,只需要知道就可以,最后使用时还是要活学活用,可能都用不到这些方法...

你可能感兴趣的:(python学习笔记-tip37(type()、isinstance()、dir()等方式获取对象信息))