Reputation: 53
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
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
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