Class: @property -> .__dict__
Ulrich
ulrich.dorda at gmail.com
Fri Dec 16 04:14:41 EST 2011
On Dec 16, 10:11 am, Ulrich <ulrich.do... at gmail.com> wrote:
> On Dec 16, 10:03 am, Steven D'Aprano <steve
>
>
>
>
>
>
>
>
>
> +comp.lang.pyt... at pearwood.info> wrote:
> > On Fri, 16 Dec 2011 00:52:11 -0800, Ulrich wrote:
> > > Good morning,
>
> > > I wonder if someone could please help me out with the @property function
> > > as illustrated in the following example.
>
> > > class te():
> > > def __init__(self):
> > > self.a = 23
> > > @property
> > > def b(self):
> > > return 2 * self.a
> > [...]
> > > Could anyone please explain me why this does not work / how to get b
> > > into .__dict__ / hint me to an explanation?
>
> > b is a property object. Like any other assignment inside the body of the
> > class, it is shared across all instances, so you won't find it in the
> > instance's personal dict. You will find it in the shared class dict.
>
> > t.__dict__['b'] # not found
> > te.__dict__['b'] # will return the property object
>
> > (By the way: it is the usual convention to start the name of a class with
> > initial capital, so Te would be a better name.)
>
> > To get something into the instance dict, you need to assign it onto the
> > instance:
>
> > t.x = 42 # puts 'x':42 into t.__dict__
>
> > --
> > Steven
>
> Hi Steven,
>
> Thanks a lot for your quick and helpful answer!
>
> This would imply that I have to search in the dict of the class and
> the dict of the instance. - works nicely.
>
> I wonder if there is somewhere a "merge of the two" already available.
>
> In the meantime, I came across dir()
> In [7]: dir(t)
> Out[7]: ['__doc__', '__init__', '__module__', 'a', 'b']
>
> This seems to return 'a' and 'b', but now crashes
>
> @property
> def attributelist(self):
> # find all attributes to the class that are of type numpy
> arrays:
> return [attr for attr in self.__dict__ if
> isinstance(getattr(self, attr), numpy.ndarray)]
hi again,
I must have hit the send accidently before finishing.
This attributelist should return me all attributes of type
numpy.ndarry.
if I replace it to
def attributelist(self):
# find all attributes to the class that are of type numpy
arrays:
return [attr for attr in dir(self) if
isinstance(getattr(self, attr), numpy.ndarray)]
it crashes going into some kind of endless loop.
Do you happen to have any idea?
thanks again!
cheers,
ulrich
More information about the Python-list
mailing list