zaur a écrit :
On 28 авг, 16:07, Bruno Desthuilliers <bruno.
42.desthuilli...@websiteburo.invalid> wrote:
zaur a écrit :



On 26 авг, 17:13, "Diez B. Roggisch" <de...@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?

Either 1/write an alternate initializer and bind it to the appropriate classes or 2/write factory functions:

1/

from foreign_module import Person, Address

def my_init(self, **kw):
    for k, v in kw.items():
        setattr(self, k, v)
    return self

Person.init = my_init
Address.init = my_init

person = Person().init(
     name="john",
     age=30,
     address = Address().init(
         street="Green Street",
         no=12
     )
 )


2/

from functools import partial
import foreign_module

def my_factory(cls, **kw):
    obj = cls()
    for k, v in kw.items():
        setattr(obj, k, v)
    return obj

Person = partial(my_factory, foreign_module.Person)
Address = partial(my_factory, foreign_module.Address)

person = Person(
     name="john",
     age=30,
     address = Address(
         street="Green Street",
         no=12
     )
 )

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to