Commit 775431d3 authored by Jeremy Hylton's avatar Jeremy Hylton

Get the meta class inheritance right.

parent fb8d40a2
...@@ -4,6 +4,11 @@ from new import function ...@@ -4,6 +4,11 @@ from new import function
class EiffelBaseMetaClass(type): class EiffelBaseMetaClass(type):
def __new__(meta, name, bases, dict):
meta.convert_methods(dict)
return super(EiffelBaseMetaClass, meta).__new__(meta, name, bases,
dict)
def convert_methods(cls, dict): def convert_methods(cls, dict):
"""Replace functions in dict with EiffelMethod wrappers. """Replace functions in dict with EiffelMethod wrappers.
...@@ -30,10 +35,6 @@ class EiffelBaseMetaClass(type): ...@@ -30,10 +35,6 @@ class EiffelBaseMetaClass(type):
class EiffelMetaClass1(EiffelBaseMetaClass): class EiffelMetaClass1(EiffelBaseMetaClass):
# an implementation of the "eiffel" meta class that uses nested functions # an implementation of the "eiffel" meta class that uses nested functions
def __new__(meta, name, bases, dict):
meta.convert_methods(dict)
return super(EiffelMetaClass1, meta).__new__(meta, name, bases, dict)
def make_eiffel_method(func, pre, post): def make_eiffel_method(func, pre, post):
def method(self, *args, **kwargs): def method(self, *args, **kwargs):
if pre: if pre:
...@@ -80,7 +81,7 @@ class EiffelDescriptor(object): ...@@ -80,7 +81,7 @@ class EiffelDescriptor(object):
self._post(inst, x, *args, **kwargs) self._post(inst, x, *args, **kwargs)
return x return x
class EiffelMetaClass2(EiffelMetaClass1): class EiffelMetaClass2(EiffelBaseMetaClass):
# an implementation of the "eiffel" meta class that uses descriptors # an implementation of the "eiffel" meta class that uses descriptors
make_eiffel_method = EiffelDescriptor make_eiffel_method = EiffelDescriptor
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment