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进行加法运算不会无限递归?
王珂: 会遇到一些比较复杂的场景,平台也会尝试优化产品以降低使用门槛。一个比较典型的案例是算法侧的超参选择。在机器学习模型中经常会遇到一些超参,需要算法工程师凭借经验和 A/B 测试结果来调整这些超参的取值。传统做法下,算法工程师需要花几个月的时间,通过不停的 A/B 测试对比调整遴选合适的超参取值。为降低该场景的使用复杂性,字节跳动的 A/B 测试平台通过一些统计学方法,自动化的循环执行 A/B 测试,分析测试结果,预测最优解取值,协助算法工程师寻找到合适的超参,使得调参耗时由几个月缩减到几个礼拜。这也就是我们的自动调参系统。
给实例化的对象赋值时,会调用__setattr__方法。在__setattr__方法中,又将属性赋值给了实例化对象本身,这样会再次触发__setattr__方法