Python获取对象信息之内置函数dir()

对于类对象实例对象,可以调用内置函数dir()获取其所有可以访问的属性和方法(包括从父类中继承的属性和方法)的列表。类对象与实例对象的结果是有区别的,类对象的结果不包括实例属性。

示例:

#coding=gbk

class A(B):

def __init__(self,x):

self.x=x

self.y=15

def aa(self):

pass

def cc(self):

self.j=0

pass

def bb(self):

pass

ali=A(20)

print(dir(ali)) #也可以写成print(dir(A(10)))

print(dir(A))

执行结果:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa', 'bb', 'cc', 'x', 'y']

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa', 'bb', 'cc']

从执行结果看出,该函数查询实例时可以列出实例对象的所有属性和方法,但cc函数中的f属性不显示。查询类时可以列出对象的所有方法,但不列出属性。

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

>>> len('ABC')

>>> 'ABC'.__len__()

如果在有继承的关系下示例如下:

#coding=gbk

class B():

def __init__(self,z):

self.z=z

self.w=1

def ee(self):

pass

class A(B):

def __init__(self,x):

self.x=x

self.y=15

def aa(self):

pass

def cc(self):

self.j=0

pass

def bb(self):

pass

ali=A(20)

print(dir(ali)) #也可以写成print(dir(A(10)))

print(dir(A))

执行结果如下:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa', 'bb', 'cc', 'ee', 'x', 'y']

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa', 'bb', 'cc', 'ee']

从执行结果可看出:

该函数查询实例时可以列出实例对象的所有属性和方法,以及父类中的所有方法,但不列出父类的属性,查询类时可以列出对象及父类的所有方法,但不列出属性。

将子类加入super().__init__()函数引入父类的构造函数

#coding=gbk

class B():

def __init__(self,z):

self.z=z

self.w=1

def ee(self):

pass

class A(B):

def __init__(self,x):

super().__init__(2)

self.x=x

self.y=15

def aa(self):

pass

def cc(self):

self.j=0

pass

def bb(self):

pass

ali=A(20)

print(dir(ali)) #也可以写成print(dir(A(10)))

print(dir(A))

执行结果如下:

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa', 'bb', 'cc', 'ee', 'w', 'x', 'y', 'z']

['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'aa', 'bb', 'cc', 'ee']

从执行结果可看出,加入父类的构造函数后, 该函数查询实例时可以列出实例对象的所有属性和方法,以及父类中的所有方法及属性。

(0)

相关推荐

  • 你需要了解的最重要的Python概念

    https://m.toutiao.com/is/JEmD36X/ 了解有关Python语言构建模块的所有信息 > Image by author Python很容易学习. 但是,它具有某些难以 ...

  • Python 内置函数最全汇总,现看现用

    今天,好好看看这些Python内置函数,也许你明天就能用到Python 内置函数最全汇总:1 abs()绝对值或复数的模In [1]: abs(-6)Out[1]: 62 all() 接受一个迭代器, ...

  • Python学习教程:Python 内置函数最全汇总(上篇)

    Python学习教程:Python 内置函数最全汇总(一) 1 abs() 绝对值或复数的模 In [1]: abs(-6)Out[1]: 6 2 all() 接受一个迭代器,如果迭代器的所有元素都为 ...

  • Python学习教程:Python内置函数大总结(下篇)

    这里接着上次的Python学习教程,给大家总结了Python 剩下的33个内置函数. 31 hash() 返回对象的哈希值 In [112]: hash(xiaoming)Out[112]: 6139 ...

  • python中的内置函数

    前言 本人只在csdn写博客 内置函数 介绍 一. 数学运算 abs()求绝对值函数 round() 近似取值 pow()求指数 divmod()求商和余数 max()求最大值和min()求最小值 s ...

  • Python内置函数包含哪些?五大类!

    所谓的内置函数,就是Python给你提供的,直接可以拿来使用的函数,比如说print.input等.那么Python内置函数有哪些?小编为你整理了几个比较重要的函数,一起来看看吧. 在学习Python ...

  • 福利来了!68个Python内置函数最全总结,建议收藏!

    小编是个资深Python爱好者,今天帮大家从10个方面总结了Python3.9版本下的68个内置函数,让大家一网打尽Python内置函数,一起来看看吧. 01.运算函数 abs(x) abs函数用来返 ...

  • 12个python数据处理常用内置函数

    简说Python 以下文章来源于python数据分析之禅 ,作者小dull鸟  简说Python推荐  来源|python数据分析之禅 作者|小dull鸟 在python数据分析中,经常需要对字符串进 ...

  • 内置函数 — Python 3.7.10 文档

    >>> import struct>>> dir() # show the names in the module namespace ['__builtins__ ...

  • 68个Python内置函数最全总结

    原创 菜鸟哥 菜鸟学Python 菜鸟哥是个资深Python爱好者,今天帮大家从10个方面总结了Python3.9版本下的68个内置函数,让大家一网打尽Python内置函数,一起来看看吧. 01.运算 ...