Tricky Areas in Python

Fredrik Lundh fredrik at pythonware.com
Mon Oct 24 06:36:18 EDT 2005


Steven D'Aprano wrote:

> Those two are easy. However, and this is where I show
> my hard-won ignorance, and admit that I don't see the
> problem with the property examples:

>>     class Base(object)
>>         def getFoo(self): ...
>>         def setFoo(self): ...
>>         foo = property(getFoo, setFoo)
>>
>>     class Derived(Base):
>>         def getFoo(self): ....

the property call in Base binds to the Base.getFoo and Base.setFoo method
*objects*, not the names, so overriding getFoo in Derived won't affect the foo
property.

to get proper dispatching for accessors, you need to add an extra layer:

            def getFoo(self): ...
            def setFoo(self, ...): ...
            def getFooDispatcher(self): self.getFoo() # use normal lookup
            def setFooDispatcher(self, ...): self.setFoo(...) # use normal lookup
            foo = property(getFooDispatcher, setFooDispatcher)

this gotcha is the motivation for this proposal:

    http://article.gmane.org/gmane.comp.python.devel/72348

(see that thread for more on this topic)

</F> 






More information about the Python-list mailing list