Python属性和方法覆盖问题:为什么子类属性仍然调用基类的方法

Ant*_*ong 2 python inheritance properties

这是一个例子

class A(object):
        def f1(self):
                return []
        test1 = property(f1)


class B(A):
        def f1(self):
                return [1, 2]

if __name__ == "__main__":
        b = B()
        print b.test1
Run Code Online (Sandbox Code Playgroud)

我希望输出为[1,2],但它会打印[].

这与我的期望相反.

我在代码中犯了什么错误吗?如果没有,我认为它是这样工作的,因为当创建属性test1时,它被绑定到基类A的f1函数.有什么可能的替代实现来实现我想要的?

Joh*_*ooy 6

f1如果您不希望污染类命名空间,可以使用lambda函数推迟查找

class A(object):

        def f1(self):
                return []

        test1 = property(lambda x:x.f1())
Run Code Online (Sandbox Code Playgroud)