Config Router

  • Google Sheets
  • CCNA Online training
    • CCNA
  • CISCO Lab Guides
    • CCNA Security Lab Manual With Solutions
    • CCNP Route Lab Manual with Solutions
    • CCNP Switch Lab Manual with Solutions
  • Juniper
  • Linux
  • DevOps Tutorials
  • Python Array
You are here: Home / TypeError: method() takes 1 positional argument but 2 were given

TypeError: method() takes 1 positional argument but 2 were given

October 8, 2021 by James Palmer

In Python, this:
my_object.method(“foo”)

…is syntactic sugar, which the interpreter translates behind the scenes into:
MyClass.method(my_object, “foo”)

…which, as you can see, does indeed have two arguments – it’s just that the first one is implicit, from the point of view of the caller.
This is because most methods do some work with the object they’re called on, so there needs to be some way for that object to be referred to inside the method. By convention, this first argument is called self inside the method definition:
class MyNewClass:

def method(self, arg):
print(self)
print(arg)

If you call method(“foo”) on an instance of MyNewClass, it works as expected:
>>> my_new_object = MyNewClass()
>>> my_new_object.method(“foo”)
<__main__.MyNewClass object at 0x29045d0>
foo

Occasionally (but not often), you really don’t care about the object that your method is bound to, and in that circumstance, you can decorate the method with the builtin staticmethod() function to say so:
class MyOtherClass:

@staticmethod
def method(arg):
print(arg)

…in which case you don’t need to add a self argument to the method definition, and it still works:
>>> my_other_object = MyOtherClass()
>>> my_other_object.method(“foo”)
foo

Something else to consider when this type of error is encountered:
I was running into this error message and found this post helpful. Turns out in my case I had overridden an __init__() where there was object inheritance.
The inherited example is rather long, so I’ll skip to a more simple example that doesn’t use inheritance:
class MyBadInitClass:
def ___init__(self, name):
self.name = name

def name_foo(self, arg):
print(self)
print(arg)
print(“My name is”, self.name)

class MyNewClass:
def new_foo(self, arg):
print(self)
print(arg)

my_new_object = MyNewClass()
my_new_object.new_foo(“NewFoo”)
my_bad_init_object = MyBadInitClass(name=”Test Name”)
my_bad_init_object.name_foo(“name foo”)

Result is:
<__main__.MyNewClass object at 0x033C48D0>
NewFoo
Traceback (most recent call last):
File “C:/Users/Orange/PycharmProjects/Chapter9/bad_init_example.py”, line 41, in
my_bad_init_object = MyBadInitClass(name=”Test Name”)
TypeError: object() takes no parameters

PyCharm didn’t catch this typo. Nor did Notepad++ (other editors/IDE’s might).
Granted, this is a “takes no parameters” TypeError, it isn’t much different than “got two” when expecting one, in terms of object initialization in Python.
Addressing the topic: An overloading initializer will be used if syntactically correct, but if not it will be ignored and the built-in used instead. The object won’t expect/handle this and the error is thrown.
In the case of the sytax error: The fix is simple, just edit the custom init statement:
def __init__(self, name):
self.name = name

Related

Filed Under: Uncategorized

Recent Posts

  • How do I give user access to Jenkins?
  • What is docker volume command?
  • What is the date format in Unix?
  • What is the difference between ARG and ENV Docker?
  • What is rsync command Linux?
  • How to Add Music to Snapchat 2021 Android? | How to Search, Add, Share Songs on Snapchat Story?
  • How to Enable Snapchat Notifications for Android & iPhone? | Steps to Turn on Snapchat Bitmoji Notification
  • Easy Methods to Fix Snapchat Camera Not Working Black Screen Issue | Reasons & Troubleshooting Tips to Solve Snapchat Camera Problems
  • Detailed Procedure for How to Update Snapchat on iOS 14 for Free
  • What is Snapchat Spotlight Feature? How to Make a Spotlight on Snapchat?
  • Snapchat Hack Tutorial 2021: Can I hack a Snapchat Account without them knowing?

Copyright © 2023 · News Pro Theme on Genesis Framework · WordPress · Log in