Python Forum
Help with lists and class objects
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Help with lists and class objects
#9
That's the beauty of over-riding the magic methods (also called "dunders" for double underscores). You don't have to do anything else. Any time your object gets printed, __str__ will get called and whatever you defined in it will be printed. See how when I "print(thing1)" it just works. Pretty useful!

class Items():
    """ Base class of Player's items. """
    
    inventory = [] # Static class attribute to hold all items.  Note that it's IN the class.
    
    def list_items(): # Static method to print the items in the static inventory. 
        for i in Items.inventory:
            print(i)

    def __init__(self, name, desc):
        """ Constructor for the Items class. """

        self.name = name
        self.description = desc
        self.attack = 10
        self.defense = 10
        self.value = 25
        Items.inventory.append(self)

    def __str__(self):
        return self.name

    def show_item_info(self):
        print("-----------------------------------------")
        print(f"Item name: {self.name}")
        print(self.description)
        print(f"Attack: {self.attack} / Defense: {self.defense}")
        print("-----------------------------------------")

# Instantiate a couple items:
thing1 = Items("Iron Sword", "A rusty iron short sword that badly needs a blacksmith.")
thing2 = Items("Wooden Shield", "A tattered, oak shield that has seen better days but does the job.")

# Print some output about the Items:
print(thing1)  # Just USE it.  Works since you over-rode __str__ "magic method"!

thing2.show_item_info()

Items.list_items()

I guess I should have mentioned that overriding __str__() and __repr__() is not the only way to print stuff from a class instance. As you see in my code I also added a fancy, multi-line show_item_info() method that simply prints lines that happen to contain several attributes from the class. Of course you can combine the techniques too. You could make a nice printout of all the items in the inventory as a pretty 2D table but leave out the descriptions...
"So, brave knights, if you do doubt your courage or your strength, come no further, for death awaits you all with nasty, big, pointy teeth!" - Tim the Enchanter
Reply


Messages In This Thread
RE: Help with lists and class objects - by stullis - Jan-13-2020, 06:57 PM
RE: Help with lists and class objects - by buran - Jan-13-2020, 07:36 PM
RE: Help with lists and class objects - by snippsat - Jan-13-2020, 08:47 PM
RE: Help with lists and class objects - by Marbelous - Jan-13-2020, 11:01 PM
RE: Help with lists and class objects - by stullis - Jan-14-2020, 11:25 PM
RE: Help with lists and class objects - by snippsat - Jan-15-2020, 12:48 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  How can I access objects or widgets from one class in another class? Konstantin23 3 1,184 Aug-05-2023, 08:13 PM
Last Post: Konstantin23
  Creating list of lists, with objects from lists sgrinderud 7 1,817 Oct-01-2022, 07:15 PM
Last Post: Skaperen
  Split dict of lists into smaller dicts of lists. pcs3rd 3 2,554 Sep-19-2020, 09:12 AM
Last Post: ibreeden
  Class objects Python_User 12 4,689 Aug-27-2020, 08:02 PM
Last Post: Python_User
  How to create and define in one line a 2D list of class objects in Python T2ioTD 1 2,148 Aug-14-2020, 12:37 PM
Last Post: Yoriz
  printing class properties from numpy.ndarrays of objects pjfarley3 2 2,047 Jun-08-2020, 05:30 AM
Last Post: pjfarley3
  How to serialize custom class objects in JSON? Exsul1 4 3,628 Sep-23-2019, 08:27 AM
Last Post: wavic
  How do I write class objects to a file in binary mode? Exsul1 7 6,001 Sep-14-2019, 09:33 PM
Last Post: snippsat
  sort lists of lists with multiple criteria: similar values need to be treated equal stillsen 2 3,454 Mar-20-2019, 08:01 PM
Last Post: stillsen
  Do objects get their own copy of the class methods? Charles1 1 2,165 Feb-02-2019, 04:40 PM
Last Post: ichabod801

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020