Changeset 963
- Timestamp:
- 07/03/11 20:07:47 (11 months ago)
- Files:
-
- 1 modified
-
hodgestar/Talks/PythonMRO/custom_mro.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
hodgestar/Talks/PythonMRO/custom_mro.py
r959 r963 1 #from types import Type 1 import random 2 2 3 3 … … 5 5 def mro(cls): 6 6 return cls.__dict__['mro'] 7 8 9 class RandomMRO(type): 10 def mro(cls): 11 sane_mro = type.mro(cls)[:-1] 12 random.shuffle(sane_mro) 13 sane_mro.append(object) 14 return sane_mro 7 15 8 16 … … 26 34 27 35 36 class D(object): 37 pass 38 39 40 class E(D): 41 pass 42 43 44 class F(E): 45 __metaclass__ = RandomMRO 46 47 28 48 if __name__ == "__main__": 29 49 c = C() 30 print "MRO :", C.__mro__50 print "MRO C:", C.__mro__ 31 51 print "Bases:", C.__bases__ # just object 32 52 print "Attributes present:", c.a, c.b, c.x, c.foo … … 35 55 print "Instance B?", isinstance(c, B) # True (odd?) 36 56 print "Instance object?", isinstance(c, object) 57 print "----" 58 print 59 60 f = F() 61 print "MRO F:", F.__mro__ 62 print "Expected:", "F, E, D, object" 63 print "----" 64 print
