Am Montag, den 15.03.2010, 05:42 -0700 schrieb Michael.Lausch:
On Mar 15, 11:40 am, Steven D'Aprano <st...@remove-this-
cybersource.com.au> wrote:
On Mon, 15 Mar 2010 01:43:02 -0700, Michael.Lausch wrote:
Hi,
I managed to get confused by Python, which is not such an easy task. The problem i have is rooted in marshalling, JSON and Dojo. I need some
static class in function with the name "$ref" i tried:
class Foo(object):
    @staticmethod
    def _ref(o):
         pass
setattr(Foo, "$ref", Foo._ref)
That doesn't work as expected:

Foo.__dict__['_ref'] is Foo.__dict__['$ref']
False

Try this instead:

setattr(Foo, "$ref", Foo.__dict__['_ref'])
Foo.__dict__['_ref'] is Foo.__dict__['$ref']
True
Now I'm trying to understand why this is the case.
How is Foo.__dict__['_ref']  different from Foo._ref?
Shouldn't it return the same attribute?

And after further experiments i found out that a making
Foo._ref a classmethod does work with my first approach.


When you declared _ref as static, a static object has been stored in Foo.
Using Foo.__dict__ you can access this static object, which is *not* the _ref function Using Foo._ref, you trigger the lookup mechanism which do much more than accessing the dict. Especially, if it finds a __get__ method in the object, it will return the __get__ result instead of the object itself.

Foo._ref is equivalent in your case to Foo.__dict__['_ref'].__get__(None, Foo)


JM


--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to