Object's nesting scope

Mel mwilson at the-wire.com
Fri Aug 28 22:38:55 CEST 2009


zaur wrote:

> On 28 авг, 16:07, Bruno Desthuilliers <bruno.
> 42.desthuilli... at websiteburo.invalid> wrote:
>> zaur a écrit :
>>
>>
>>
>> > On 26 авг, 17:13, "Diez B. Roggisch" <de... at nospam.web.de> wrote:
>> >> Whom am we to judge? Sure if you propose this, you have some usecases
>> >> in mind - how about you present these
>>
>> > 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?

My work-around would be:

p = person = Person()
p.name = "john"
p.age = age	# assuming, for a moment, that the age I wanted to set 
                # happened to be in another variable
a = p.address = Address()
a.street = "Green Street"
a.no = 12

del a, p	# optional, for a tidier namespace

Slightly verbose, but, saying what it means, it avoids having to guess which 
age of several ages might have to be used in various places; the same would 
go for other input variables.  Actually, I probably wouldn't use p as a 
stand-in for person unless person were a global name and p could be local.

	Mel.




More information about the Python-list mailing list