Python:魔法函数中为什么可以调用内建函数

Python的魔法函数不是内建函数的底层函数吗?为什么在重写魔法函数时还是可以调用内建函数?这样不会一直递归陷入死循环吗?
像这样:
def bool(self):
return bool(abs(self))
为什么可以这样使用?

def __len__(self): 中 len(self.values)  是对self.values调用len()
 
是调用self.values对象的 __len__(), 不是调用自己self对象的 __len__() 不是递归

如果你 def __len__(self): 中写成 len(self)  对self调用len()
才是调用自己self对象的 __len__() 这才会形成无限递归调用

你上边的return bool(abs(self))也是一样, 是对abs()的返回值调用 bool(), 不是调用自己self对象的 __bool__() 也不是递归

例子

class A:
    def __init__(self, v):
        self.values = v

    def __len__(self):
        return len(self.values)

    def __bool__(self):
        return bool(self)

a = A([1,2,3])
print(len(a))  #返回3
print(bool(a)) #是无限递归调用

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

你这哪是魔法函数?是自定义的bool函数,调用内建函数bool

我试了一下,我cv对着,这个一提交 bool 前后的两个下划线就没了
def --len--(self):
return len(self.values)
看一下这个,就当他是两个下划线,我看到过这样的话:
special method 就是一类有特殊名字 special names的方法,此特殊名字就是前后有双下划线,此类方法实质就是内建函数的底层函数,也即 len()函数调用的是__len()函数,abs()调用的是__abs()
len()是内建函数,但是写在魔法函数(特殊函数)--len--下,我想不明白,按我所想这不是自己调自己吗???它不会报错,而且是写在类下的

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632