为什么这个python赋值不像预期的那样工作?

one*_*oop 2 python-3.x

这将返回您的期望:

class My(object):
    def __len__(self):
        return 6

a = My()
print(len(a))
Run Code Online (Sandbox Code Playgroud)

但这会引发错误:

class My2(object):
    pass

b = My2()
b.__len__ = lambda x: 6
print(len(b))
Run Code Online (Sandbox Code Playgroud)

TypeError: object of type 'My2' has no len()

为什么?

mat*_*gan 5

这是因为您尝试在实例上定义方法而不是在基础类上.例如,这可以工作:

class My2(object):
    pass

b = My2()
b.__class__.__len__ = lambda x: 6
print(len(b))  # Prints 6
Run Code Online (Sandbox Code Playgroud)

此外,为了澄清这些评论,这不是一个lambda或函数的问题,因为这不起作用:

class My2(object):
    pass


def l(x):
    return 6

b = My2()
b.__len__ = l
print(len(b))  # TypeError: object of type 'My2' has no len()
Run Code Online (Sandbox Code Playgroud)