mirror of
https://github.com/python/cpython
synced 2024-09-18 22:41:40 +00:00
Get the meta class inheritance right.
This commit is contained in:
parent
58e2ff2e81
commit
98013be797
|
@ -4,6 +4,11 @@
|
|||
|
||||
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):
|
||||
"""Replace functions in dict with EiffelMethod wrappers.
|
||||
|
||||
|
@ -30,10 +35,6 @@ def convert_methods(cls, dict):
|
|||
class EiffelMetaClass1(EiffelBaseMetaClass):
|
||||
# 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 method(self, *args, **kwargs):
|
||||
if pre:
|
||||
|
@ -80,7 +81,7 @@ def callmethod(self, inst, args, kwargs):
|
|||
self._post(inst, x, *args, **kwargs)
|
||||
return x
|
||||
|
||||
class EiffelMetaClass2(EiffelMetaClass1):
|
||||
class EiffelMetaClass2(EiffelBaseMetaClass):
|
||||
# an implementation of the "eiffel" meta class that uses descriptors
|
||||
|
||||
make_eiffel_method = EiffelDescriptor
|
||||
|
|
Loading…
Reference in a new issue