2

I need to use __getitem__ for all 7 arguments in my class but __getitem__ won't let me so I tried to use a tuple but I keep getting this error:

TypeError: cannot unpack non-iterable int object

What should I do?

def __getitem__(self, key):
    name,author,category,Isbn_number,printing_house,date,number_of_order = key
    return (self.name,self.author,self.category,self.Isbn_number,self.printing_house,self.date,self.number_of_order)
Pika Supports Ukraine
  • 3,612
  • 10
  • 26
  • 42
Umut K.
  • 91
  • 1
  • 1
  • 8
  • see https://stackoverflow.com/questions/43627405/understanding-getitem-method – pangyuteng Nov 20 '18 at 00:31
  • I dont get it ı mean ı understand(kinda) how getitem works but ı need to use getitem method for getting 7 arg in key cause ı want tu use a sorting function for my objects so ı need my objects to return as keys – Umut K. Nov 20 '18 at 00:38
  • i recommend just creating your own custom `get` method, no need to pass in any arguments to the method nor even follow the python `__getitem__` convention. – pangyuteng Nov 20 '18 at 00:41
  • but ı dont know how yo use a get method but ı tried and then ı figured out my args are all str so dict.get cant receive them – Umut K. Nov 20 '18 at 00:57

1 Answers1

1

To make a getitem that returns the contents of each of the member variables given a key that is the same as the name of that member, you could have the class store the information in a dict and have your get_item return from that dict. E.g.:

class Book():
    def __init__(self, name='Jud', author='Jill', category='YA'):
        self.elements = {'name': name, 'author': author, 'category': category}

    def __getitem__(self, key):
        return self.elements[key]

Then with an instance of the class you should be able to do things like:

book = Book()
book['name']
book['author']
skumhest
  • 401
  • 2
  • 10