【发布时间】:2013-01-06 04:24:31
【问题描述】:
我试图用属性覆盖 Python (2.7) 类的成员,如以下代码所示:
class Base:
def __init__(self):
self.foo = 1
class Derived(Base):
foo = property(lambda self: 2)
print Derived().foo
但是,最后一行打印的是 1 而不是 2。从我认为属性应该起作用的方式来看(即,稍后轻松地将成员更改为函数),这对我来说似乎违反直觉。我错过了什么吗?有什么解决方法吗?
【问题讨论】:
-
我确定这只是举例,但是在实际的
def上使用property()作为装饰器比直接使用lambda更具可读性。 -
故事的寓意:总是使用新式类。
-
@Lattyware:实际上,我个人更喜欢简单的属性中的
lambda样式:) -
@rainer 好吧,那么简单的属性不应该存在(正如我所说,我认为这只是示例)。任何复杂到值得使用属性的东西都最好按照我上面解释的方式完成,以提高可读性。
标签: python inheritance properties