On Thu, Jan 22, 2009 at 3:04 PM, Marcus Goldfish <magoldf...@gmail.com> wrote: > I'm trying to design a base class for a hierarchy. The properties I want to > specify for the base class depend on the values of other properties of the > base class. For instance, in this toy example of a base FoodProcessor > class: > class FoodProcessor: > "Model for a kitchen appliance food processor" > speed_settings # example [1, 2, 3, 4] > blade_settings # example ["slice", "grate", "grind"] > slice_thickness # example ["thin", "thick"], but only if > blade_setting is "slice" > it only make sense to have the slice_thickness property set when > blade_settings = "slice"; otherwise, it would be preferable to only define > the speed_settings and blade_settings properties. For example: > class ProcessorA(FoodProcessor): > "A slicing-only processor" > speed_settings = [1, 2, 3, 4] > blade_settings = "slice" > slice_thickness = ["thin", "thick"] > class ProcessorB(FoodProcessor): > "A non-slicing processor" > speed_settings = [1,2,3,4] > blade_settings = ["grate", "grind"] > slice_thickness = None > Can anyone suggest some work-arounds, or refactoring for this type of > design? Is there a design pattern for this?
I'm not sure what the problem is. You can provide default values in the base class: class FoodProcessor(object): speed_settings = None blade_settings = None slice_thickness = None Then in a derived class you can override just the ones you want to use: class ProcessorB(FoodProcessor): "A non-slicing processor" speed_settings = [1,2,3,4] blade_settings = ["grate", "grind"] If you want to validate that the current settings make sense, you could put a test in the __init__() method, which is simple to implement but happens at instance creation time, or you could write a metaclass to validate the settings at class creation time, which is more difficult (to understand, anyway). Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor