Tobias Blass wrote: > > > On Sat, 29 Jan 2011, Francesco Bochicchio wrote: > >>On 29 Gen, 12:10, Tobias Blass <tobiasbl...@gmx.net> wrote: >>> Hi all >>> I'm just learning python and use it to write a GUI (with Tkinter) for a >>> C program I already wrote. When trying to execute the program below I >>> get the following error message. >>> >>> Traceback (most recent call last): >>> File "./abirechner.py", line 64, in <module> >>> win =MainWin() >>> File "./abirechner.py", line 43, in __init__ >>> self.create_edit(row=i); >>> TypeError: create_edit() got multiple values for keyword argument 'row' >>> >>> I don't really understand why create_edit gets multiple values, it gets >>> one Integer after another (as I see it) >>> Thanks for your help
>>> class MainWin(Frame): >>> def create_edit(row,self): >>Try this: >>> def create_edit(self, row): > Ok it works now. So the problem was that python requires 'self' to be the > first parameter? When you invoke a method Python implicitly passes the instance as the first positional parameter to it, regardless of the name: >>> class A: ... s = "yadda" ... def yadda(but_i_dont_want_to_call_it_self): ... print but_i_dont_want_to_call_it_self.s ... >>> A().yadda() yadda You can provoke the same error with a function: >>> def f(a, b): ... pass ... >>> f(1, b=2) >>> f(a=1, b=2) >>> f(2, a=1) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() got multiple values for keyword argument 'a' You can think of argument binding as a two-step process. At first positionals are bound to the formal parameters in the order of appearance from left to right; then named arguments are bound to parameters with the same name. If a name is already catered by a positional argument (or a name doesn't occur at all and doesn't have a default value) you get an Exception. -- http://mail.python.org/mailman/listinfo/python-list