Python-获取对象信息dir()、__dict__

  1. 获取对象信息——dir()、__dict__

获取对象信息——dir()、__dict__

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

>>> class MyClass(object):
...     ca = 'ca'
...     def __init__(self):
...         self.ia = 'ia'
...     def im(self):
...         pass
...     @classmethod
...     def cm(cls):
...         pass
...     @staticmethod
...     def sm():
...         pass
...
>>> dir(MyClass)
['__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__', 'ca', 'cm', 'im', 'sm']             # 类对象中不包含实例属性
 
>>> dir(MyClass())           
['__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__', 'ca', 'cm', 'ia', 'im', 'sm']       # 实例对象中包含实例属性

获取对象信息——特殊属性__dict__

  • 对于指定的类对象或实例对象,我们可以访问特殊属性__dict__获得该类对象或实例对象所绑定的所有属性和方法的字典,其中字典中的键为属性名或方法名。
  • 子类有子类的__dict__,父类有父类的__dict__,两者是独立的,不会随着继承而继承

类对象的__dict__存储所有实例共享的变量和函数(类属性,方法等),类的__dict__并不包含其父类的属性。
实例对象的__dict__仅存储与该实例相关的实例属性。

#!/usr/bin/python3

class MyClass(object):
    ca = 'ca'
    def __init__(self):
        self.ia = 'ia'
    def im(self):
        pass
    @classmethod
    def cm(cls):
        pass
    @staticmethod
    def sm():
        pass



print(MyClass.__dict__)
print(MyClass().__dict__)

class ChildClass(MyClass):
    ca1 = 'ca1'
    def __init__(self):
        self.ia1 = 'ia1'

print(ChildClass.__dict__)
print(ChildClass().__dict__)
[root@lyucan ~]# ./24.py
{'__module__': '__main__', 'ca': 'ca', '__init__': <function MyClass.__init__ at 0x7f91a5921bf8>, 'im': <function MyClass.im at 0x7f91a5921c80>, 'cm': <classmethod object at 0x7f91a59ba8d0>, 'sm': <staticmethod object at 0x7f91a59ba908>, '__dict__': <attribute '__dict__' of 'MyClass' objects>, '__weakref__': <attribute '__weakref__' of 'MyClass' objects>, '__doc__': None}    # 类对象的__dict__
{'ia': 'ia'}             # 实例对象的__dict__
{'__module__': '__main__', 'ca1': 'ca1', '__init__': <function ChildClass.__init__ at 0x7f91a5921e18>, '__doc__': None}    # 类对象的__dict__
{'ia1': 'ia1'}           # 实例对象的__dict__

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 289211569@qq.com