是否可以访问设置为不可访问的属性?例如。为get
设置新的dict
方法?
我试图进入一个庞大的,有时令人困惑的代码库。为了处理很多事情,我试图装饰一些方法以在每次调用它们时打印日志。 Python装饰器(实际上并没有真正装饰)可以很好地包装我们自己的方法,但是当我尝试(这次确实)装饰dict.get
时出现了问题。我希望my_dict.get = my_wrapper(my_dict.get)
可以正常工作,但是收到AttributeError
并显示消息'dict' object attribute 'get' is read-only
。
根据我的研究,这意味着dict使用descriptor来处理分配(即,引发一个Exception insetad来处理该分配)。我试图插入描述符本身或__dict__
的{{1}}中,但没有任何帮助,我也找不到足够详细的资源来提供帮助。
子类化是一种变通方法,也许是到达此处的一种方式,但我一直认为,人们可以访问并连接Python中的任何内容,而阻止用户执行某事只是意味着让他们在做一些更精明的事情之前先三思而后行。反正做这件事,这次更明显了。是误解还是我错过了使dict
工作的东西?
Python可以涉入其中,不需要新类就可以更改单个实例的单个属性,从而可能破坏依赖于该实例的确切类型的代码,对吗?