python之7-3对象的信息/方法获取

  • 我们可以用dir()来获取一个类,一个模块,一个字符串的信息/方法

  • 例如:

#可以列出Image模块的方法



>>import Image



>>dir(Image)



#列出字符串abc的信息,字符串abc其实是类str,也就是列出了str的方法



>>dir('abc')



#那么应该有一个方法是__len__()



>>'abc'.__len__()



3



#而len('abc'),也可以获取字符串长度,因为len()就是调用的类str中的__len__ 因此



#根据这个特性,我们可以在自定义类中,定义一个def __len__()来设置一个返回值.



#这样子,当len()搞定这个自定义类的实例的时候,就会调用自定义类中的__len__ 从而返回我们想要的数值



#例如:



#!/usr/bin/env python



# coding = utf-8



class test(object):



    def __len__(self):



        return 1







test_len = test()



print len(test_len)



aaa103439@aaa103439-pc:~/桌面/python$ python test8.py 



1



  • 还记得那个类模板么?
class 类名():



类变量名 =



类名.类变量名    #调用类变量



    def _init_(self,参数1,参数2):   #这里的参数也可以没有,即可以直接 self.属性 = 值  而self每次对应的就是实例自己



        self.属性1 = 参数1



        self.属性2 = 参数2



    def 实例方法函数名(self,方法变量1,方法变量2):   



        函数体







实例名 = 类名(参数1,参数2)    #实例创建



实例名.实例方法函数名()    #实例动作函数调用



  • getattr()可获取一个属性,如果不存在,可以加一个默认值,如果添加了默认值则返回ture
#!/usr/bin/env python



# coding=utf-8



class test(object):



    def __init__(self, a):



        self.a = a



        self.b = 1



    def __len__(self):



        return 1







#这里可以看到类test有两个属性a和b和一个方法__len__



test_attr = test(0)



if hasattr(test_attr, 'a'):



   print getattr(test_attr, 'a')



if hasattr(test_attr, 'b'):



   print  getattr(test_attr, 'b')



if not hasattr(test_attr, 'c'):



   print getattr(test_attr, 'c', 404)



   setattr(test_attr, 'c', 2)



   print getattr(test_attr, 'c')





aaa103439@aaa103439-pc:~/桌面/python$ python test8.py 



0



1



404



2



  • 那么我们应该怎么来用这些获取属性的函数呢?正确的应用应该是这样子的,即判定一个对象是否有这个属性或者方法,如果有,我们就去调用它.

  • 例如:这个例子有点脱裤子放屁的赶脚...不过只是为了说明一种用法

#!/usr/bin/env python



# coding=utf-8



import Image



def test_image(fb):



    if hasattr(fb, 'thumbnail') and hasattr(fb, 'size'):



        print fb.size



        fb.thumbnail((20,20))



        fb.save('/home/aaa103439/桌面/2.png','png')



    return None







im = Image.open('/home/aaa103439/桌面/1.png')



test_image(im)



print Image.open('/home/aaa103439/桌面/2.png').size





aaa103439@aaa103439-pc:~/桌面/python$ python test9.py 



(159, 142)



(20, 17)

你可能感兴趣的:(python)