TypeError: 'kwarg' is an invalid keyword argument for this function

Peter Otten __peter__ at web.de
Mon Oct 13 13:33:00 CEST 2014


Dave Angel wrote:

> Ian Kelly <ian.g.kelly at gmail.com> Wrote in
> message:
>> On Sun, Oct 12, 2014 at 6:55 AM, roro codeath
>> <rorocodeath at gmail.com> wrote:
>>> How to implement it in my class?
>>>
>>> class Str(str):
>>>     def __init__(self, *args, **kwargs):
>>>         pass
>>>
>>> Str('smth', kwarg='a')
>> 
>> The error is coming from the __new__ method. Because str is an
>> immutable type, you should override the __new__ method, not __init__.
>> Example:
>> 
>> class Str(str):
>>     def __new__(cls, *args, **kwargs):
>>         return super().__new__(cls, args[0])
>> 
>>>>> Str('smth', kwarg='a')
>> 'smth'
>> 
> 
> It would also help to spell it the same.  In the OP's
>  implementation,  he defined kwargs, and tried to use it as
>  kwarg.

That is consistent as should become clear when using something completely 
different:

>>> class Str(str):
...     def __init__(self, *args, **kwargs): pass
... 
>>> Str("smth", alpha="beta")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'alpha' is an invalid keyword argument for this function





More information about the Python-list mailing list