编辑:这个问题基于两个错误:最初没有包含self
在方法中,并且假设无界方法不会表现出多态性,但它们会表现出多态性。我投票关闭它。
我可以将一个方法作为 Python 中的函数值对象:
class A:
def foo(self):
return "Hi, I'm A.foo"
f = A.foo
a = A()
print(f(a))
产生Hi, I'm A.foo
.
到现在为止还挺好。但是,f
不适用于子类:
class B(A):
def foo(self):
return "Hi, I'm B.foo"
f = A.foo
b = B()
f(b)
仍然产生Hi, I'm A.foo
,而b.foo()
产生Hi, I'm B.foo
。换句话说,多态性不适用。
问题:有没有办法随时获取函数值f
对象?f(x) == x.foo()
isinstance(x, A)
换句话说,我如何完成下面的代码片段才能正常工作?
class A:
def foo(self):
return "Hi, I'm A.foo"
class B(A):
def foo(self):
return "Hi, I'm B.foo"
f = <WHAT DO I PUT HERE?>
a = A()
b = B()
assert f(a) == a.foo()
assert f(b) == b.foo()