热线电话:13121318867

登录
首页精彩阅读__dict__详解,深入理解类原理,会用了以后真爽
__dict__详解,深入理解类原理,会用了以后真爽
2022-04-26
收藏
__dict__详解,深入理解类原理,会用了以后真爽

作者:麦叔

来源:麦叔编程

这也是一位麦友的提问,具体找不到哪位麦友了:

__dict__是个字典吗?是干嘛的?

直接回答

__dict__看名字就猜得出,它是个字典。

  • 类有自己的__dict__属性,用于存放类的静态函数、类函数、普通函数、全局变量以及一些内置的属性
  • 对象有自己的__dict__属性,用于存放对象的属性,也就是self.xyz等等。

知道了它们的用处,我们可以使用__dict__写出很简洁的代码,在不知道属性名的情况下,也能操作属性等。具体后面会给两个例子。

代码例子

假设有下面的类:

class Maiyou(object): a = 0 b = 1 def __init__(self, name, age): self.name = name
        self.age = age def normal_func(self): print('普通的函数')  @staticmethod def static_func(): print('静态函数')  @classmethod def class_func(self): print('类函数') if __name__ == '__main__':
    print('类的__dict__:')
    print( Maiyou.__dict__)
    print()

    obj = Maiyou('zhangsan', 18)
    print('对象的__dict__:')
    print(obj.__dict__)

麦友类Maiyou拥有好几个函数,对象有两个属性。

运行一下可以看到:

「类的__dict__包括:」

类的__dict__:
{'__module__': '__main__', 'a': 0, 'b': 1, '__init__': <function Maiyou.__init__ at 0x10093e440>, 'normal_func': <function Maiyou.normal_func at 0x10093e4d0>, 'static_func': function Maiyou.static_func at 0x10093e560>)>, 'class_func': function Maiyou.class_func at 0x10093e5f0>)>, '__dict__': '__dict__' of 'Maiyou' objects>, '__weakref__': '__weakref__' of 'Maiyou' objects>, '__doc__': None}

「对象的__dict__包括:」

对象的__dict__:
{'name': 'zhangsan', 'age': 18}

应用

「应用1」

我们可以在不知道属性名称的情况下循环和使用属性。这个类比较简单,只有两个属性。如果对象有20个属性,就会显得更加有用。

obj = Maiyou('zhangsan', 18) for att in obj.__dict__: print(att, obj.__dict__[att])

打印结果:

ame zhangsan age 18 

「应用2」

再来看一个例子,下面这个构造函数:

class Person:  def __init__(self,_obj): self.name = _obj['name'] self.age = _obj['age'] self.energy = _obj['energy'] self.gender = _obj['gender'] self.email = _obj['email'] self.phone = _obj['phone'] self.country = _obj['country']

可以利用__dict__被简化成:

class Person:  def __init__(self,_obj): self.__dict__.update(_obj)

明白了吗?如果喜欢,记得点赞!

数据分析咨询请扫描二维码

最新资讯
更多
客服在线
立即咨询