Ilias Lazaridis wrote: > I have some python code which looks similar to this: > > class Car(BaseClass) : > manufacturer = factory.string() > model = factory.string() > modelYear = factory.integer() > > def __str__(self): > return '%s %s %s' % (self.modelYear, self.manufacturer, > self.model) > > def factory.string(self) > s = String() # creates a string object > #... # does several things > return s # returns the string object > > - > > I would like to simplify it in this way: > > class Car(BaseClass): > manufacturer = factory.string(2) # 2 = position number... > model = factory.string(3) # ...withinn __str__ > modelYear = factory.integer(1) > > def factory.string(self, position) > s = String() # creates a string object > ... # does several things > # creates somehow the __str__ functionality... > > return s # returns the string object > > - > > How could I achieve this? > > . >
I'm slightly confused about your use of factory functions for making instance variables (perhaps you could explain that?). Without knowing more about that, here's a mixin solution I've used in the past (note that __strdef__ is something I just made up): class SmartStr(object): def __str__(self): return "<%s %s>" % (self.__class__.__name__, ", ".join(attrname + "=" + str(getattr(self, attrname)) for attrname in self.__strdef__)) class Car(SmartStr): __strdef__ = ["model_year", "manufacturer", "model"] def __init__(self, manufacturer, model, model_year): self.manufacturer = manufacturer self.model = model self.model_year = model_year c = Car("Toyota", "Camry", 1990) print c # => <Car model_year=1990, manufacturer=Toyota, model=Camry> -- http://mail.python.org/mailman/listinfo/python-list