diff options
author | Guido van Rossum <guido@python.org> | 1997-08-25 21:36:44 +0000 |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-08-25 21:36:44 +0000 |
commit | 1fb071cc648aa5e72f7c9aa6a230cb826bb8eed3 (patch) | |
tree | 5f07616770a6895b74ff63431a35a87912efe00f /Demo/metaclasses/Meta.py | |
parent | b2173c3146e945100ba53bfe6343d20ec3c9a333 (diff) | |
download | cpython-git-1fb071cc648aa5e72f7c9aa6a230cb826bb8eed3.tar.gz |
Checkpoint.
Diffstat (limited to 'Demo/metaclasses/Meta.py')
-rw-r--r-- | Demo/metaclasses/Meta.py | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/Demo/metaclasses/Meta.py b/Demo/metaclasses/Meta.py index b63f781c4a..76193c1f38 100644 --- a/Demo/metaclasses/Meta.py +++ b/Demo/metaclasses/Meta.py @@ -29,10 +29,10 @@ class MetaHelper: raw = self.__formalclass__.__getattr__(name) except AttributeError: try: - _getattr_ = self.__dict__['_getattr_'] + ga = self.__formalclass__.__getattr__('__usergetattr__') except KeyError: raise AttributeError, name - return _getattr_(name) + return ga(self, name) if type(raw) != types.FunctionType: return raw return self.__methodwrapper__(raw, self) @@ -50,8 +50,13 @@ class MetaClass: __inited = 0 def __init__(self, name, bases, dict): - if dict.has_key('__getattr__'): - raise TypeError, "Can't override __getattr__; use _getattr_" + try: + ga = dict['__getattr__'] + except KeyError: + pass + else: + dict['__usergetattr__'] = ga + del dict['__getattr__'] self.__name__ = name self.__bases__ = bases self.__realdict__ = dict @@ -98,7 +103,16 @@ def _test(): x = C() print x x.m1(12) - + class D(C): + def __getattr__(self, name): + if name[:2] == '__': raise AttributeError, name + return "getattr:%s" % name + x = D() + print x.foo + print x._foo +## print x.__foo +## print x.__foo__ + if __name__ == '__main__': _test() |