Python __dict__属性:查看对象内部所有属性名和属性值组成的字典
在Python 类的内部,无论是类属性还是实例属性,都是以字典的形式进行存储的,其中属性名作为键,而值作为该键对应的值。
为了方便用户查看类中包含哪些属性,Python 类提供了 __dict__ 属性。需要注意的一点是,该属性可以用类名或者类的实例对象来调用,用类名直接调用 __dict__,会输出该由类中所有类属性组成的字典;而使用类的实例对象调用 __dict__,会输出由类中所有实例属性组成的字典。
class PLanguage: def __init__(self): self.name = "赛兔子" self.add = "https://www.cnblogs.com/qingchengzi/p/18055134" def say(self): pass # 通过类名调用__dict__ print(PLanguage.__dict__) # 通过类实例对象调用__dict p_obj = PLanguage() print(p_obj.__dict__)
程序输出结果:
{'__module__': '__main__', '__init__': <function PLanguage.__init__ at 0x0000000002894378>, 'say': <function PLanguage.say at 0x0000000009EDE6A8>,
'__dict__': <attribute '__dict__' of 'PLanguage' objects>, '__weakref__': <attribute '__weakref__' of 'PLanguage' objects>, '__doc__': None}
{'name': '赛兔子', 'add': 'https://www.cnblogs.com/qingchengzi/p/18055134'}
例如:
class CLanguage: a = 1 b = 2 def __init__(self): self.name = "drf" self.add = "https://www.cnblogs.com/qingchengzi/p/18054793" class PLanguage: c = 1 d = 2 def __init__(self): self.name = "赛兔子" self.add = "https://www.cnblogs.com/qingchengzi/p/18055134" def say(self): pass # 父类名调用__dict__ print(CLanguage.__dict__) # 子类名调用__dict__ print(PLanguage.__dict__) # 父类实例对象调用__dict__ c_obj = CLanguage() print(c_obj.__dict__) # 子类实例对象调用__dict__ p_obj = PLanguage() print(p_obj.__dict__)
运行结果:
{'__module__': '__main__', 'a': 1, 'b': 2, '__init__': <function CLanguage.__init__ at 0x00000000028C4378>, '__dict__': <attribute '__dict__' of 'CLanguage' objects>,
'__weakref__': <attribute '__weakref__' of 'CLanguage' objects>, '__doc__': None}
{'__module__': '__main__', 'c': 1, 'd': 2, '__init__': <function PLanguage.__init__ at 0x0000000009EDE6A8>, 'say': <function PLanguage.say at 0x0000000009EDE730>,
'__dict__': <attribute '__dict__' of 'PLanguage' objects>, '__weakref__': <attribute '__weakref__' of 'PLanguage' objects>, '__doc__': None}
{'name': 'drf', 'add': 'https://www.cnblogs.com/qingchengzi/p/18054793'}
{'name': '赛兔子', 'add': 'https://www.cnblogs.com/qingchengzi/p/18055134'}
除此之外,借助由类实例对象调用 __dict__ 属性获取的字典,可以使用字典的方式对其中实例属性的值进行修改,例如:
class PLanguage: c = 1 d = 2 def __init__(self): self.name = "赛兔子" self.add = "https://www.cnblogs.com/qingchengzi/p/18055134" def say(self): pass #通过类实例对象调用 __dict__ p_obj = PLanguage() print(p_obj.__dict__) p_obj.__dict__['name'] = "Python教程" # 使用字典方式对其中实例属性值进行修改 print(p_obj.name)
运行结果:
{'name': '赛兔子', 'add': 'https://www.cnblogs.com/qingchengzi/p/18055134'}
Python教程
浙公网安备 33010602011771号