On Wed, Sep 12, 2012 at 4:22 AM, pyjoshsys <j.m.dagenh...@gmail.com> wrote:
> The output is still not what I want. Now runtime error free, however the 
> output is not what I desire.

[SNIP]

> class Trial(object):
>     '''class to demonstrate with'''
>     def __init__(self):
>         object.__init__(self)
>         self.name = None
>
>     @classmethod
>     def SetName(cls, name):
>         cls.name = name

[SNIP]

> if __name__ == '__main__':
>     test = Test()
>     print 'instance'
>     print '', test.name #should be Test
>     print 'class'
>     print '', Test.name
>
>
> The output is: python decors2.py
> instance
>  None
> class
>  Test
>
> I want:
> instance
>  Test
> class
>  Test
>
> Is this possible in this manner?


The SetName class method sets the name on the *class* dictionary.  The
class's __init__ method also sets a name (None) on the *instance*
dictionary.  From an instance's perspective, the instance dictionary
will shadow the class dictionary.  If you remove the attribute from
the instance dictionary entirely (delete the "self.name = None" line),
and leave the class dictionary as is, then you will get the output you
want (although from your later post I am not certain that this is the
behaviour you want).


On Wed, Sep 12, 2012 at 5:15 AM, pyjoshsys <j.m.dagenh...@gmail.com> wrote:
> so decorators only pass the object and not any instance of the object as the 
> implied argument? Is this right?

Right.

> The idea was to use @setname instead of instance.SetName(instance.__name__).

The appropriate place to do this so that it applies to all instances
of the class rather than to the class would be inside the __init__
method.

Also, instances don't have a __name__ attribute, so it's still unclear
to me what you're looking for.  Did you mean the effect to be that of
"instance.SetName(cls.__name__)"?  If so, then the decorator approach
(with the line "self.name = None" removed) should be fine for your
purposes -- you'll just have the name stored in the class dict instead
of in each instance dict, but it will still be visible as long as you
haven't shadowed it.
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to