Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError: 'class' object is not callable

I have got:

main script:

import music.umm

UMM = music.umm.UMM()
UMM.read_information()

module script:

class UMM(object):
    
    def read_information(self):
        # ..some code
        UMM.login()

UMM = UMM()

With this code, I get this error when I run main script:

TypeError: 'UMM' object is not callable

How do I fix it?

I remove from the module this line:

UMM = UMM()

Now, the main script RUN the function module, but if the script module goes to another function, I get this error:

TypeError: unbound method login() must be called with UMM instance as first argument (got nothing instead)

like image 799
Black_Ram Avatar asked Nov 03 '13 11:11

Black_Ram


People also ask

How do I fix this object is not callable?

But in Python, this would lead to the Typeerror: int object is not callable error. To fix this error, you need to let Python know you want to multiply the number outside the parentheses with the sum of the numbers inside the parentheses. Python allows you to specify any arithmetic sign before the opening parenthesis.

Why is a class object not callable Python?

Python attempts to invoke a module as an instance of a class or as a function. This TypeError: 'module' object is not callable error occurs when class and module have the same name. The import statement imports the module name not the class name.

How do I fix TypeError in Python?

How to Fix TypeError in Python. To avoid type errors in Python, the type of an object should be checked before performing an operation. This can help ensure that the object type is appropriate for the operation and if the operation is supported by the object.

How do you make a class object callable in Python?

How to Make an Object Callable. Simply, you make an object callable by overriding the special method __call__() . __call__(self, arg1, .., argn, *args, **kwargs) : This method is like any other normal method in Python. It also can accept positional and arbitrary arguments.


2 Answers

This is how I do it:

# Module Code
class MyClass(object):
    def foo(self):
        print "Foo"


# Client Code
from MyClass import MyClass
inst = MyClass()
inst.foo()
like image 129
AdamD Avatar answered Sep 16 '22 16:09

AdamD


An SSCCE could look like

umm.py:

class UMM(object):
    def login(self):
        print("login()")

    def read_information(self):
        print("read_info() 1")
        UMM.login()
        print("read_info() 2")

main script:

import umm
umm = umm.UMM()
umm.read_information()

I didn't test it, but I imagine that this would yield exactly the following exception

TypeError: unbound method login() must be called with UMM instance as first argument (got nothing instead)

The reason is that UMM.login() is a method which expects to be called via an instance of the object.

Inside read_information(), you have self as a concrete object instance. So you could replace the call

UMM.login()

with

self.login()

in order to fulfill all dependencies.

A call to UMM.login() would try to call login() without a object instance to work on. This would work with a @staticmethod or a @classmethod, but not with a regular bound method.

like image 22
glglgl Avatar answered Sep 19 '22 16:09

glglgl