adding a static class to another class
Bruno Desthuilliers
bdesth.quelquechose at free.quelquepart.fr
Mon Sep 17 07:00:04 EDT 2007
Nathan Harmston a écrit :
> HI,
>
> I m trying to start an api in a similar way to the djangic way of
> Class.objects.all(). Ie objects is a "Manager" class.
>
> So:
>
> class Foo(object):
> def __init__(self):
> self.test = "NEE"
>
> class Manager(object):
> def __init__(self):
> pass
> def all(self):
> return "COCONUTS"
>
> Because of how some of the code is set up I cant use
> metaclasses........so I try to use a decorator:
>
> def addto(instance):
> def decorator(f):
> import new
> f = new.instancemethod(f, instance, instance.__class__)
> setattr(instance, "objects", f)
> return f
> return decorator
>
> class Manager(object):
> @addto(Foo)
> def __init__(self):
> .............
>
> however this only binds the init method to the Foo.objects, so not
> what I want.
Indeed.
> If I try using classmethod...then it just says the
> Foo.objects doesnt exist.
You mean decorating Manager.__init__ with classmethod ???
I may be wrong, but I suspect you don't have a clear idea of what you're
doing here.
> Does anyone have any ideas how I can accomplish this using decorators?
Yes : don't use a decorator !-)
Instead of asking for how to implement what you think is the solution,
you might be better explaining the problem you're trying to solve.
> And also preventing more than one Manager instance instantiated at one
> time.
Q&D:
class Singleton(object):
def __new__(cls):
if not hasattr(cls, '_inst'):
cls._inst = object.__new__(cls)
return cls._inst
Same remark as above...
More information about the Python-list
mailing list