Dinakar
Dinakar

Reputation: 329

TypeError: 'dict' object is not callable from main

I wrote a code which is going to store occurrences of words from a text file and store it to a dictionary:

class callDict(object):
    def __init__(self):
        self.invertedIndex = {}

then I write a method

def invertedIndex(self):
        print self.invertedIndex.items()

and here is how I am calling:

if __name__ == "__main__":
    c = callDict()
    c.invertedIndex()

But it gives me the error:

Traceback (most recent call last):
  File "E\Project\xyz.py", line 56, in <module>
    c.invertedIndex()
TypeError: 'dict' object is not callable

How can I resolve this?

Upvotes: 2

Views: 1776

Answers (3)

Anshul Goyal
Anshul Goyal

Reputation: 76887

You are defining a method and an instance variable in your code, both with the same name. This will result in a name clash and hence the error.

Change the name of one or the other to resolve this.

So for example, this code should work for you:

class CallDict(object):
    def __init__(self):
        self.inverted_index = {}
    def get_inverted_index_items(self):
        print self.inverted_index.items()

And check it using:

>>> c = CallDict()
>>> c.get_inverted_index_items()
[]

Also check out ozgur's answer for doing this using @property decorator.

Upvotes: 6

Ozgur Vatansever
Ozgur Vatansever

Reputation: 52133

In addition to mu's answer,

@property
def invertedIndexItems(self):
    print self.invertedIndex.items()

then here is how you'll cal it:

if __name__ == "__main__":
    c = callDict()
    print c.invertedIndexItems

Upvotes: 2

eduffy
eduffy

Reputation: 40224

Methods are attributes in Python, so you can't share the same name between them. Rename one of them.

Upvotes: 1

Related Questions