获取对象信息——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