Mug a écrit :
hi ,i had a problem on constructor overwrite:
i have something like:

class obj:
def __init__(self, x=100, y=None):
    if y is None:
          self.x=x
    else:
          self.y=y

With such an initializer, you'll have instances with an attribute 'y' and no attribute 'x', and instances with an attribute 'x' and no attribute 'y' :

>>> class Obj(object):
...     def __init__(self, x=100, y=None):
...         if y is None: self.x = x
...         else: self.y = y
...
>>> objx = Obj()
>>> objx.x
100
>>> objx.y
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Obj' object has no attribute 'y'
>>> objy = Obj(y='foo')
>>> objy.x
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'Obj' object has no attribute 'x'
>>> objy.y
'foo'
>>>


Are you *sure* this is what you want ?

so i can call :
objet = obj()  # x=100 y=None
or
objet = obj(40) # x= 40 y=None

but if i do :
objet = obj('not cool') #x='not cool' y=None

What else would you expect ???

since x is not typed .

'x' is a name, and names are indeed "untyped". Now the object bound to name 'x' is actually typed.

i am waiting for a result:
objet = obj('not cool') #x=100 y='not cool'
as they do in C++ or java.

Python is neither C++ nor Java (nor Pascal nor Lisp nor <yourfavoritelanguagehere> FWIW), so trying to forcefit C++/Java idioms will at best lead you to pain and frustation. Just like trying to forcefit Python idioms in C++ or Java (or Pascal or Lisp etc....).

is there a way to do it?

objet = obj(y='not cool')

Now if you could explain the problem you're trying to solve instead of the solution you thought would solve it, we might eventually provide more help.
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to