using exec() to instantiate a new object.
RyanN
Ryan.Neve at gmail.com
Mon Nov 10 10:37:12 EST 2008
On Nov 10, 7:47 am, RyanN wrote:
> Thank you both, I knew there had to be a good way of doing this.
>
> -Ryan
Just an update. I used dictionaries to hold objects and their names.
I'm beginning to understand better. Now to apply this to my actual
problem. Here's the code I ended up with:
class continent(object):
'''
A continent has a name and a dictionary of countries
'''
def __init__(self,continent_name):
self.name = continent_name
self.countries = {} #countries is a dictionary of country name
and object
def addCountry(self,country_name,population = 0):
self.countries[country_name] = country(country_name) #Create a
new instance of country() and add it to dictionary
self.countries[country_name].population = population #Set
country population
def addState(self,country_name,state_name,population = 0):
if country_name in self.countries:
self.countries[country_name].addState(state_name,population)
else: #This state must be in a new country
self.addCountry(country_name)
self.addState(country_name,state_name,population)
def listCountries(self):
for a_country in self.countries:
print a_country,
"pop:",self.countries[a_country].population,", states:"
self.countries[a_country].listStates()
class country(object):
'''
A country has a name, a population and a dictionary of states
'''
def __init__(self,name):
self.name = name
self.population = 0
self.states = {} #states is a dictionary of state name and
object
def addState(self,state_name,population = 0):
self.states[state_name] = state(state_name) #Create a new
instance of state() and add it to dictionary
self.states[state_name].population = population
self.population += population #Add this state's population to
the country's
def listStates(self):
#print self.states[:]
for a_state in self.states:
self.states[a_state].stateInfo()
class state(object):
'''
A state has a name, color, and a population
'''
def __init__(self,state_name):
self.name = state_name
self.color = 'unknown'
self.population = 0
def stateInfo(self):
print " ",self.name,"pop:",self.population,
"color:",self.color
#Now some examples of how to set and access this information
NAm = continent('NAm') #First we add our continent
NAm.addCountry('canada',700) #Now add a a country to NAm
NAm.addState('usa','maine',400) #We can add a state even if we haven't
added the country yet
NAm.addState('usa','california',2000)
NAm.addState('canada','quebec',700) # I know it's actually a province
NAm.addState('mexico','QR',550)
usa = NAm.countries['usa'] # we can make things easier on ourselves
usa.population = 5000 #short for: NAm.countries['usa'].population =
5000
usa.addState('florida') #Another way to add a state, we can set
population seperately
NAm.countries['usa'].states['florida'].population = 2000
for any_state in usa.states: #Set an attribute for all state objects
usa.states[any_state].color = 'blue'
NAm.listCountries() # Generates a report
# three ways to get to print the same information
print NAm.countries['usa'].states['maine'].name,
NAm.countries['usa'].states['maine'].population
print usa.states['maine'].name, usa.states['maine'].population # We
already assigned usa to NAm.countries['usa']
maine = usa.states['maine']
print maine.name, maine.population
More information about the Python-list
mailing list