重写魔法方法的相关问题

class A:
    def __setattr__(self,name,value):
        self.name=value

class B:
    def __init__(self,x):
        self.x=x
    def __add__(self,other):
        return self.x+other

为什么实例化类A进行赋值会无限递归,而实例化类B进行加法运算不会无限递归?

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7511024
  • 你也可以参考下这篇文章:【爬虫】从B站或央视网爬取视频下载链接
  • 除此之外, 这篇博客: 一年40万次实验,字节跳动A/B测试平台是怎么炼出来的?中的 InfoQ: 是否有一些测试比较复杂?字节跳动如何降低复杂性,让业务人员易于理解和使用? 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 王珂: 会遇到一些比较复杂的场景,平台也会尝试优化产品以降低使用门槛。一个比较典型的案例是算法侧的超参选择。在机器学习模型中经常会遇到一些超参,需要算法工程师凭借经验和 A/B 测试结果来调整这些超参的取值。传统做法下,算法工程师需要花几个月的时间,通过不停的 A/B 测试对比调整遴选合适的超参取值。为降低该场景的使用复杂性,字节跳动的 A/B 测试平台通过一些统计学方法,自动化的循环执行 A/B 测试,分析测试结果,预测最优解取值,协助算法工程师寻找到合适的超参,使得调参耗时由几个月缩减到几个礼拜。这也就是我们的自动调参系统。

给实例化的对象赋值时,会调用__setattr__方法。在__setattr__方法中,又将属性赋值给了实例化对象本身,这样会再次触发__setattr__方法