python中類和物件的__dict__

Ordgod_new發表於2020-12-17

類和物件都有__dict__屬性,用於儲存類和物件的所有屬性。但是二者的__dict__是不一樣的。

最大的不同是:類的__dict__不允許手動直接修改,而物件的__dict__允許手動直接修改.

比如:

class Myclass():
  def __init__(self):
    self.x = 1

myobject = Myclass()

myobject.y = 2  # okay
myobject.__dict__['y']=3  # okay

Myclass.z = 2  # okay
Myclass.__dict__['z']=3  #TypeError: 'mappingproxy' object does not support item assignment

為了讓類的__dict__沒法被手動改,python把類的__dict__設定為 mappingproxy(python3) 或者dictproxy(python2)。 mappingproxydictproxy只是名字不同,沒有區別。

Reference:

  1. https://stackoverflow.com/questions/39687713/what-the-difference-between-dict-proxy-in-python2-and-mappingproxy-in-python3
  2. https://stackoverflow.com/questions/25440694/whats-the-purpose-of-dictproxy

相關文章