Sorry, the first example should be:
class Status(object):
def __init__(self,definitions):
for key,function in definitions:
setattr(self,key,property(function))
On Jun 14, 2010, at 3:06 PM, Craig Yoshioka wrote:
> I'm trying to write a class factory to create new classes dynamically at
> runtime from simple 'definition' files that happen to be written in python as
> well. I'm using a class factory since I couldn't find a way to use
> properties with dynamically generated instances, for example:
>
> I would prefer this, but it doesn't work:
>
> class Status(object):
> pass
>
> def makeStatus(object):
> def __init__(self,definitions):
> for key,function in definitions:
> setattr(self,key,property(function))
>
> this works (and it's fine by me):
>
> def makeStatus(definitions):
> class Status(object):
> pass
> for key,function in definitions:
> setattr(Status,key,property(function))
> return Status()
>
> but I would also like the functions to only be evaluated when necessary since
> some may be costly, so I want to do the following:
>
> def makeStatus(definitions):
> class Status(object):
> pass
> for key,function,data in definitions:
> setattr(Status,key,property(lambda x: function(data)))
> return Status()
>
> but all my properties now act as if they were invoked with the same data even
> though each one should have been a new lambda function with it's own
> associated data. It seems Python is 'optimizing'? all the lambdas to the
> same object even though that's clearly not what I want to do. Anyone have
> any suggestions as to:
>
> 1) why
> 2) what I should do
> 3) a better way in which to implement this pattern
>
>
> Cheers!,
> -Craig
> --
> http://mail.python.org/mailman/listinfo/python-list
--
http://mail.python.org/mailman/listinfo/python-list