pyhton类的内存分配问题:链式调用
在使用__getattr__魔术方法实现链式调用时,每次调用返回的chain实例的id会不同。这是因为每当调用__getattr__时,都会创建一个新的chain实例。
原因分析
在提供的代码示例中,__getattr__方法中的代码会创建一个新的chain实例,并将传给path参数的新路径作为它的_path属性。每次调用返回的都是一个不同的chain实例,因此其id也随之改变。
立即学习“Python免费学习笔记(深入)”;
解决方法
要解决这个问题,需要修改__getattr__方法中创建实例的方式,使其返回当前实例而不是创建新的实例。修改后的代码如下:
def __getattr__(self, path): self._path = '%s/%s' % (self._path, path) return self
登录后复制
通过这种修改,__getattr__方法将不会创建新的chain实例,而是返回当前实例。这样,每次调用将返回相同的chain实例,并且其id也会保持不变。
以上就是Python 链式调用中,为什么每次调用__getattr__都会创建新的实例?的详细内容,更多请关注抖狐科技其它相关文章!
-
2024年10月13日GRT币价格_GRT币今日最新价格
(24小时GRT币价格走势) the graph(grt)价格走势分析 截至 2024 年 10 月 13 日 15 时,The Graph (GRT) 的交易价格为 0.1638 美元,24 小时交...
-
Windows11预览体验计划无法选择渠道怎么办
windows 11 预览体验计划频道选择故障解答想要体验 windows 11 beta 版,却无法选择相应的预览体验计划频道?别担心!php小编苹果为您带来了一份详细指南,解决此问题并指导您顺利转...
-
怎么防范web3钱包被盗_怎么保护web3钱包
防范web3钱包被盗的方法有:1、不点不明链接;2、不轻易点击或者参与钱包中收到的不明链接/不明空投活动;3、不要将私钥导入未知的第三方网站;4、不要向他人泄露私钥、密码、助记词等;5、不要复制不明的...
-
网易云app怎么关闭自动续费
网易云音乐自动续费功能关闭步骤:打开网易云音乐 app前往个人中心进入会员中心管理自动续费关闭自动续费网易云音乐关闭自动续费步骤 网易云音乐订阅服务包含自动续费功能,以下是如何关闭它: 步骤 1:打开...
-
函数重载在 C++ 中的演变和发展?
函数重载在 c++++ 演化中逐渐增强,从基于参数类型重载(c++98)到基于编译时常量重载(c++11)、自动类型推导(c++17)和 constexpr 函数,极大地提高了代码的可读性、可维护性和...