At least in my own case, the 'self.rooms[z][12][85]' is a means to
accessing a 'bucket' array for a given room (z), during a given hour
(12), at a given temperature(85). Each bucket holds, the average,
variance, standard deviation and an array of previous readings (note,
readings are not temperatures, these are actually timestamps).
Is there any benefit to creating a class for each bucket (with an
'update' method) vs. storing those variables as a dictionary with the
'Room' class as {'var':0, 'avg': 0, 'sd':0, 'readings':[]} and having
the Room class hold the update function; not so much from good
programming practices, but more attempting to number of resources the
class will be using.
Thank you,
Adam
On 6/1/2012 10:24 AM, James Reynolds wrote:
If you have functions (or in this case methods) which will be used on
a certain 'objects' data structure, a class representation of the data
is the natural fit. Otherwise, you will need to pass the dictionary
around to various functions and this will be seriously confusing.
However, you probably should consider how to represent that data
within a class body, that is, it is extremely confusing to access data
such as self.rooms[z][12][85][AVG].
Instead, you should break down what the data structure into
like-things and how they are related, for example, you might consider
something like this:
class Weather(object):
def __init__(self, temp, precipitation, humidity, bara_pres):
self. temp = temp
self. temp = precipitation
self. temp = humidity
self. temp = bara_pres
def my_func(self, *args,**kwargs):
pass #do stuff here
However, if you need to either further define the datapoints of if you
want the datapoints to be able to "do things" then you could do
something like this:
class Temperature(object):
def __init__(self, temp):
self. temp = temp
self.other_stuff_about_temp = stuff
def my_temp_func(self, *args,**kwargs):
pass #do stuff here
class Weather(object):
def __init__(self, temp, precipitation, humidity, bara_pres):
self. temp = Temperature(temp)
self.precipitation = precipitation
self.humidity = humidity
self.bara_pres = bara_pres
def my_func(self, *args,**kwargs):
pass #do stuff here
from here you could either put your instantiated objects into a list
and do math on the elements thereof, or you could put them into
another class object like this:
class WeatherOverTime(object):
def __init__(self, my_list):
self.my_list = my_list
def avg(self, attr): #attr is the attribute you want to take an
average of, so humidity, temp, whatever.
temp_list = map(lambda x: getattr(x, attr), my_list)
return sum(temp_list) / count(temp_list)
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor