Search code examples
pythonfunctionclassfirst-class-functions

Python: variables inside class methods


I'm learning python and am trying to write a wound system based on hot zones of a character. Here's what I've written. Don't judge me too much.

class Character:
    def __init__ (self, agility, strength, coordination):
            self.max_agility = 100
            self.max_strength = 100
            self.max_coordination = 100
            self.agility = agility
            self.strength = strength
            self.coordination = coordination

    def hit (self, hit_region, wound):
            self.hit_region = hit_region
            self.wound = wound

            #Hit Zones
            l_arm=[]
            r_arm=[]
            l_leg=[]
            r_leg=[]
            hit_region_list = [l_arm , r_arm, l_leg, r_leg]


            #Wound Pretty Names
            healthy = "Healthy"
            skin_cut = "Skin Cut"
            muscle_cut = "Muscle Cut"
            bone_cut = "Exposed Bone"

            hit_region.append(wound)              

john = Character(34, 33, 33)

john.hit(l_arm, skin_cut)

I'd expect for the skin_cut input to be recognized as "Skin Cut", then added to l_arm, which I defined as a list. However, I always get a name error (l_arm is not defined). If i rewrite the method with the 'wound' as the first argument,the Name Error now comes with 'wound' as not defined. That kind of tells me it's something in the structure of the class I've missed, but I can't tell what.


Solution

  • I change my previous answer to this.

    class Character:
    def __init__ (self, agility, strength, coordination):
            self.max_agility = 100
            self.max_strength = 100
            self.max_coordination = 100
            self.agility = agility
            self.strength = strength
            self.coordination = coordination
            self.l_arm=[]
            self.r_arm=[]
            self.l_leg=[]
            self.r_leg=[]
            self.hit_region_list = [self.l_arm , self.r_arm, self.l_leg, self.r_leg]
            self.healthy = "Healthy"
            self.skin_cut = "Skin Cut"
            self.muscle_cut = "Muscle Cut"
            self.bone_cut = "Exposed Bone"
    
    def hit (self, hit_region, wound):
            self.hit_region = hit_region
            self.wound = wound
            hit_region.append(wound)
            #Hit Zones
    
    
    
            #Wound Pretty Names
    
    
    
    
    john = Character(34, 33, 33)
    
    john.hit(john.l_arm,john.skin_cut)
    
    print john.hit_region
    print john.l_arm
    

    After running the above code I got this output

    output:
    ['Skin Cut']
    ['Skin Cut']
    

    As per the post, I think this is what you wanted. According to your previous code, your declarations were accessible inside a function only. Now You can manipulate the data and these variables for particular instances by declaring them inside the constructor.