This question already has an answer here:
I'm new to Python. I've written two Classes, the second one has an instance of the first one as a member variable. Now I want to call a method of Class2 via the instance of it in class one. I could not find an answer for it. Something like this:
class Class1:
def uselessmethod(self):
pass
class Class2:
def __init__(self):
self.c = Class1()
def call_uselessmethod(self):
self.c.uselessmethod()
k = Class2
k.call_uselessmethod() # Error!
Gives the following error:
k.call_uselessmethod() #Error
TypeError: call_uselessmethod() missing 1 required positional argument: 'self'
Any idea of what is going on here? Thanks in advance.
The statement:
Is actually assigning the variable
k
to the class itself, which is atype
object. Remember, in Python everything is an object: classes are simplytype
objects.What you want is an instance of
Class2
. For that you must callClass2
's constructor:To create the instance, you need to call the class,
k = Class2()
.What was really happening the that
k = Class2
created an alias to the class andk.call_uselessmethod`` created an unbound method which requires that you pass in the instance as the argument.
Here is a session that explains exactly what is happening:
Note, the error message in Python2.7.6 has been improved over what you were seeing :-)
call_uselessmethod
requires that there first be an instance ofClass2
before you use it. However, by doing this:you are not assigning
k
to an instance ofClass2
but ratherClass2
itself.To create an instance of
Class2
, add()
after the class name:Now, your code will work because
k
points to an instance ofClass2
like it should.