Mizuchi
Mizuchi

Reputation: 53

I cant get the return function working

So, I'm making a text based game to learn the python language. and I can't get the return function working...

Here is my code;

class Weapon:
    def __str__(self):
        return self.name

class WoodenStaff(Weapon):
    def __init__(self):
        self.name = "Wooden Staff"
        self.description = "Basic Staff"
        self.damage = 5

inventory = [WoodenStaff()]
print (inventory)

After I run this I got:

[<__main__.WoodenStaff object at 0x000001E9F192CAC8>]

Upvotes: 2

Views: 89

Answers (3)

0n10n_
0n10n_

Reputation: 402

Just add a __repr__ method to WoodenStaff Class

Upvotes: 0

DeepSpace
DeepSpace

Reputation: 81614

You need to implement __repr__ because your object is inside a list.

class Weapon:
    def __str__(self):
        return self.name

    def __repr__(self):
        return self.name

class WoodenStaff(Weapon):
    def __init__(self):
        self.name = "Wooden Staff"
        self.description = "Basic Staff"
        self.damage = 5

inventory = [WoodenStaff()]
print (inventory)
>> [Wooden Staff]

Without implementing __repr__, you get the expected output if iterating over the list:

class Weapon:
    def __str__(self):
        return self.name

class WoodenStaff(Weapon):
    def __init__(self):
        self.name = "Wooden Staff"
        self.description = "Basic Staff"
        self.damage = 5

inventory = [WoodenStaff()]
for weapon in inventory:
    print(weapon)
>> Wooden Stuff

Upvotes: 3

Pythonista
Pythonista

Reputation: 11635

You need to define __repr__ as well

 def __repr__(self):
      return self.name

e.g. -

>>> class Weapon:
...     def __str__(self):
...         return self.name
...     def __repr__(self):
...         return self.name
...
>>> class WoodenStaff(Weapon):
...      def __init__(self):
...         self.name = 'Foo'
...
>>> [WoodenStaff()]
[Foo]

Upvotes: 2

Related Questions