Hi all,

I am fairly confident with Python, and am now turning my focus from learning how to program the language to learning to program it well. I am wondering what the best way to approch classes which have too many variables in them.

I an writing a platformer game, and, though it works fine, I am trying to clean up the code. My Player class is especially messy.

Here is an example:

class Player(obj.PhySprite):

    warp = None #this stores the function to change levels. It should take the
                #same arguments as the Level class 
    #counters:
    shards = 0 #shards collected
    points = 0
    lives = 5

    #charictaristics:
    IS_PLAYER = True
    FALLS = True
    MOVES = True
    IS_ITEM = True


    entrance_coords = None #the normal coords when the player entered the
                           #portal to the level. When he dies/wins he is
                           #returned to this location.

    #constants:
    CLIMB_VEL = 1.25 #how fast he climbs up/down/left/right
    WALK_ACCEL = .1 #how fast he normally accelerates
    RUN_ACCEL = .02 #how fast he accelerates when running or dashing

    DECREST_ACCEL = .4 #when the jump key is releaced this is added to
                       #gravity until he stops going up and starts
                       #falling

    DEACCEL = .4 #when slowing down or turning this is additional accel

    MAX_WALK = 1  #max walking speed
    MAX_RUN = 2.95 #max running speed
    MAX_DASH = 3  #max dashing speed
    MAX_VEL = 5   #max overall speed
    MAX_CAPED_FALL = .5
    MAX_DRIFTING_CAPE_FALL = 1
    ASCENDING_TIME = 30
    ASCENDING_VEL = 8
    MAX_FALL = MAX_VEL #max falling speed
    MAX_TWIRL = 25
    JUMP_VEL = 5.7 #the up velocity given when jump key is pressed
    SPIN_JUMP_VEL = 5 #the up velocity given when jump key is pressed
    TAP_JUMP_VEL = 4 #the up velocity given when spin jump onto something
                   #tappable when not holding spin key.
    RUN_JUMPVEL_RATIO = 1/2.8 #this times abs(horz speed) is added to
                              #initial jump velocity

    #state:
    is_small = True #Powered up and tall or small?
    is_caped = False #Has a cape?

    run_button = False #is run button being held? Used to find when it
                       #it is first pressed
    grounded = False #player's feet touching ground.
    standing_on = None #the object the player's feet is touching
    climbing = False #on ladder and holding on
    fell_off = False #fell off the ladder.
    can_jump = False #is able to jump (on ground or ladder and not holding
                     #jump key from previouse jump)
    skidding = False #turning one direction with momentum in another
                     #direction
    turning = False #facing the screen after skidding.
    ascending = False
    ascending_counter = 0
    glide_dashed = False
    gliding = False
    twirling = False
    twirling_counter = 0

    direction = 1 #direction of motion -1 is left 1 is right

    frame = 0 #framecounter for animations

    spin_jump = False #spin jumping

    fainting = False
    faint_timer = 0

    blinking = False
    blink_timer = 0

    holding = None #item player is holding.

    kicking = 0 #timer for holding out player's foot when kicking.

    destroyed = 0 #keeps track of combo kills

    pocket = None #contents of player's pocket
    falling_item = None

    won = False #Got the shard
    winning_number = None #The shard player got
    won_frame = 0
    won_timer = -15
    final_explosion = None

    holding_up = False #has the player been holding the up key.
                       #Used to detect if he should go though a portal or just
                       #walked by one while holding the up key.
def __init__(self):
    ...
    code, code, code
    ...

As you can see, most of these are just counters, timers, constants, and flags. How is the most pythonic way to sort them? The way it is now is rather confusing. I have thought about breaking off chunks of variables into classes just meant to store them, but I don't think that is the best way.

What is generally good practise for this?

I do not see much difficulty for program itself for the way you have put the variables, only thing is that you have lot of Class variables that normally are to be avoided as much as possible.

Maybe you should look at putting data to a configuration file http://docs.python.org/2/library/configparser.html

That configparser looks useful, I have been useing configuration files, but I was just wondering what to do with the clutter. Thanks for the link.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.