Object's nesting scope
zaur
szport at gmail.com
Sat Aug 29 03:34:48 EDT 2009
On 29 авг, 08:37, "Gabriel Genellina" <gagsl-... at yahoo.com.ar> wrote:
> En Fri, 28 Aug 2009 15:25:55 -0300, zaur <szp... at gmail.com> escribió:
>
>
>
> > On 28 авг, 16:07, Bruno Desthuilliers <bruno.
> > 42.desthuilli... at websiteburo.invalid> wrote:
> >> zaur a écrit :
>
> >> > Ok. Here is a use case: object initialization.
>
> >> > For example,
>
> >> > person = Person():
> >> > name = "john"
> >> > age = 30
> >> > address = Address():
> >> > street = "Green Street"
> >> > no = 12
>
> >> > vs.
>
> >> > person = Person()
> >> > person.name = "john"
> >> > person.age = 30
> >> > address = person.address = Address()
> >> > address.street = "Green Street"
> >> > address.no = 12
>
> >> Err... Looks like you really should read the FineManual(tm) -
> >> specifically, the parts on the __init__ method.
>
> >> class Person(object):
> >> def __init__(self, name, age, address):
> >> self.name = name
> >> self.age = age
> >> self.address = address
>
> >> class Address(object):
> >> def __init__(self, street, no):
> >> self.no = no
> >> self.street = street
>
> >> person = Person(
> >> name="john",
> >> age=30,
> >> address = Address(
> >> street="Green Street",
> >> no=12
> >> )
> >> )
>
> > What are you doing if 1) classes Person and Address imported from
> > foreign module 2) __init__ method is not defined as you want?
>
> Welcome to dynamic languages! It doesn't matter *where* the class was
> defined. You may add new attributes to the instance (even methods to the
> class) at any time.
>
> 1)
> person = Person()
> vars(person).update(name="john",age=30,address=Address())
> vars(person.Address).update(street="Green Street",no=12)
>
> 2)
> def the_initializer_i_would_like(person, name, age):
> person.name = name
> person.age = age
>
> person = Person()
> the_initializer_i_would_like(person, name="john", age=30)
>
> 3)
> def the_initializer_i_would_like(self, name, age):
> self.name = name
> self.age = age
>
> Person.init = the_initializer_i_would_like
> person = Person()
> person.init(name="john", age=30)
>
> 4)
> def a_generic_updater(obj, **kw):
> try: ns = vars(obj)
> except Exception: ns = None
> if ns is not None:
> ns.update(kw)
> else:
> for name in kw:
> setattr(obj, name, kw[name])
>
> person = Person()
> a_generic_updater(person, name="john", age=30)
>
> --
> Gabriel Genellina
I know about these ways of object initializing. What I said is about
using object's dictionary as nested scope in code block. Object
initialization is just one use case.
So we say about different things.
More information about the Python-list
mailing list