Drilling down in a dict with "complex" objects

Benjamin Kaplan benjamin.kaplan at case.edu
Tue May 25 01:25:52 EDT 2010


On Mon, May 24, 2010 at 9:34 PM, Six <john.d.perkins at gmail.com> wrote:
> I am trying to access an objects sub-object attributes. I can boil the
> code I am working with down to this problem section:
> (snip)
> class Pt:
>  x = None
>  y = None
>  def __init__(self, x, y):
>    self.x, self.y = x, y
>  pass
>
> class Pts:
>  curr_point = None
>  next_point = None

First of all, don't do this. Python doesn't have variable
declarations, only assignments. So this creates a variable called
curr_point for the *class*, not for the instance. What Java calls
static variables. It doesn't matter here but...

>  def __init__(self, n, m):
>    self.next_point = Pt(n, m)
>  def update(self, point):
>    self.curr_point = self.next_point
>    self.next_point = point
>
> class PtManage:
>  points = {}

Here you have a single mutable dict shared by all instances of PtManage.
a = PtManage()
b = PtManage()
a.points["a"] = Pts(3,2)
print b.points

>  def __init__(self):
>    pass
>
> point = Pts(3,5)
> pman = PtManage()
> pman.points["odds"] = point
> print dir(pman)
>
> print pman["odds"].next_point.x

PtManage doesn't define __getitem__, so pman["odds"] won't work.
pman.points["odds"] should.

>
> (snip)
>
> It's this last line that doesn't work. What am I doing wrong? Is this
> a failure of the design or am I missing something obvious? How do I
> get down and see that "Pt" classes x attribute within the PtManage
> dict?
> --
> http://mail.python.org/mailman/listinfo/python-list
>



More information about the Python-list mailing list