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'))
#设置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()
总结
这些获得对象属性的方法,只需要知道就可以,最后使用时还是要活学活用,可能都用不到这些方法...