Python Forum

Full Version: Printing out incidence values for Class Object
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello all,

new coder here.

I wanted to start by creating a character generation code. I created the following code:-

import random

class Character:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        

    def __str__(self):
        return f"Name: {self.name}\nAge: {self.age}\n{self.clothing}"

class Clothing:
    def __init__(self):
        self.top = self.generate_clothing("top")
        self.lower_body = self.generate_clothing("lower body")
        self.leggings = self.generate_clothing("leggings")
        self.belt = self.generate_clothing("belt")
        self.sword = self.generate_clothing("sword")
        self.shield = self.generate_clothing("shield")
        self.undergear = self.generate_undergear()

    def generate_clothing(self, clothing_type):
        materials = ["cotton", "silk", "leather"]
        colors = ["red", "blue", "green", "black", "white", "yellow"]
        material = random.choice(materials)
        color = random.choice(colors)
        return f"{color} {material} {clothing_type}"

    def generate_undergear(self):
        materials = ["iron", "steel", "bronze"]
        colors = ["silver", "gold", "bronze"]
        material = random.choice(materials)
        color = random.choice(colors)
        return f"{color} {material} undergear (sword and shield)"

def generate_random_name():
    prefixes = ["Sir", "Lord", "Lady", "Princess", "Prince", "Master", "Mistress"]
    suffixes = ["blade", "fire", "ice", "thunder", "storm", "shadow", "light"]
    name = random.choice(prefixes) + " " + random.choice(suffixes)
    return name

def generate_random_age():
    return random.randint(18, 65)

def generate_character():
    name = generate_random_name()
    age = generate_random_age()
    return Character(name, age)

def main():
    character = generate_character()
    print("\nCharacter Details:")
    print(character)

if __name__ == "__main__":
    main()
running this returns:-

Output:
Character Details: Name: Master light Age: 18 <__main__.Clothing object at 0x104c25e10>
my question hopefully is simple. How do I change or add to this code so the output would return the details from self.clothing = Clothing()? i.e. what is output as <__main__.Clothing object at 0x104c25e10>?


Example would be :-

Output:
Name: Master light Age: 18 "Wearing leather top and carrying and steel sword and thunder shield"
What I mean is outputting the values that should be random generated from class Clothing:?

I can see that Name and Age are being selected and output from

class Character:
    def __init__(self, name, age):
        self.name = name
        self.age = age

but nothing from class Clothing:

Thanks!

SquiderDragon
Character needs clothing arttributes, just like it has name and age attributs,
Here is one possible way.

from random import choice, randint 

class Character:
    def __init__(self, clothing, gear):
        self.name = choice(('Charlie', 'Troy', 'Elaina', 'Brenda', 'Ralph'))
        self.age = randint(18, 35)
        self.clothing = clothing 
        self.gear = gear 


    def __str__(self):
        return f' Name: {self.name}\n Age: {self.age}\n Clothing: {self.clothing}\n Gear: {self.gear}'


class Clothing:
    def __init__(self):
        self.material = ('cotton', 'silk', 'leather')
        self.color = ('red', 'blue', 'green', 'black', 'white', 'yellow')
        self.top = f'{choice(self.color)} colored top made from {choice(self.material)}'
        self.pants = f'{choice(self.color)} colored pants made from {choice(self.material)}'
        self.belt = f'{choice(("rope", "leather", "cloth"))} belt'

    def __str__(self):
        return f'{self.top}, {self.pants}, {self.belt}'


class Gear:
    def __init__(self):
        self.material = ('copper', 'bronze', 'iron', 'steel')
        self.color = ('gold', 'silver', 'bronze')
        self.sword = f'{choice(self.color)} colored sword made from {choice(self.material)}'
        self.shield = f'{choice(self.color)} colored shield made from {choice(self.material)} with a {choice(('dragon', 'eagle', 'snake'))} emblem on it'

    def __str__(self):
        return f'{self.sword} and {self.shield}'

print(Character(Clothing(), Gear()))
Output
Output:
Name: Ralph Age: 33 Clothing: blue colored top made from cotton, white colored pants made from leather, cloth belt Gear: silver colored sword made from iron and bronze colored shield made from copper with a snake emblem on it
(Mar-31-2024, 08:44 PM)menator01 Wrote: [ -> ]Here is one possible way.

from random import choice, randint 

class Character:
    def __init__(self, clothing, gear):
        self.name = choice(('Charlie', 'Troy', 'Elaina', 'Brenda', 'Ralph'))
        self.age = randint(18, 35)
        self.clothing = clothing 
        self.gear = gear 


    def __str__(self):
        return f' Name: {self.name}\n Age: {self.age}\n Clothing: {self.clothing}\n Gear: {self.gear}'


class Clothing:
    def __init__(self):
        self.material = ('cotton', 'silk', 'leather')
        self.color = ('red', 'blue', 'green', 'black', 'white', 'yellow')
        self.top = f'{choice(self.color)} colored top made from {choice(self.material)}'
        self.pants = f'{choice(self.color)} colored pants made from {choice(self.material)}'
        self.belt = f'{choice(("rope", "leather", "cloth"))} belt'

    def __str__(self):
        return f'{self.top}, {self.pants}, {self.belt}'


class Gear:
    def __init__(self):
        self.material = ('copper', 'bronze', 'iron', 'steel')
        self.color = ('gold', 'silver', 'bronze')
        self.sword = f'{choice(self.color)} colored sword made from {choice(self.material)}'
        self.shield = f'{choice(self.color)} colored shield made from {choice(self.material)} with a {choice(('dragon', 'eagle', 'snake'))} emblem on it'

    def __str__(self):
        return f'{self.sword} and {self.shield}'

print(Character(Clothing(), Gear()))
Output
Output:
Name: Ralph Age: 33 Clothing: blue colored top made from cotton, white colored pants made from leather, cloth belt Gear: silver colored sword made from iron and bronze colored shield made from copper with a snake emblem on it

Excellent!

Many thanks Smile

SquiderDragon