source: trunk/essentials/dev-lang/python/Demo/metaclasses/Meta.py@ 3226

Last change on this file since 3226 was 3225, checked in by bird, 19 years ago

Python 2.5

File size: 2.9 KB
Line 
1"""Generic metaclass.
2
3XXX This is very much a work in progress.
4
5"""
6
7import types
8
9class MetaMethodWrapper:
10
11 def __init__(self, func, inst):
12 self.func = func
13 self.inst = inst
14 self.__name__ = self.func.__name__
15
16 def __call__(self, *args, **kw):
17 return apply(self.func, (self.inst,) + args, kw)
18
19class MetaHelper:
20
21 __methodwrapper__ = MetaMethodWrapper # For derived helpers to override
22
23 def __helperinit__(self, formalclass):
24 self.__formalclass__ = formalclass
25
26 def __getattr__(self, name):
27 # Invoked for any attr not in the instance's __dict__
28 try:
29 raw = self.__formalclass__.__getattr__(name)
30 except AttributeError:
31 try:
32 ga = self.__formalclass__.__getattr__('__usergetattr__')
33 except (KeyError, AttributeError):
34 raise AttributeError, name
35 return ga(self, name)
36 if type(raw) != types.FunctionType:
37 return raw
38 return self.__methodwrapper__(raw, self)
39
40class MetaClass:
41
42 """A generic metaclass.