Changeset 963

Show
Ignore:
Timestamp:
07/03/11 20:07:47 (11 months ago)
Author:
hodgestar
Message:

Another MRO fiddling example.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • hodgestar/Talks/PythonMRO/custom_mro.py

    r959 r963  
    1 #from types import Type 
     1import random 
    22 
    33 
     
    55    def mro(cls): 
    66        return cls.__dict__['mro'] 
     7 
     8 
     9class 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 
    715 
    816 
     
    2634 
    2735 
     36class D(object): 
     37    pass 
     38 
     39 
     40class E(D): 
     41    pass 
     42 
     43 
     44class F(E): 
     45    __metaclass__ = RandomMRO 
     46 
     47 
    2848if __name__ == "__main__": 
    2949    c = C() 
    30     print "MRO:", C.__mro__ 
     50    print "MRO C:", C.__mro__ 
    3151    print "Bases:", C.__bases__  # just object 
    3252    print "Attributes present:", c.a, c.b, c.x, c.foo 
     
    3555    print "Instance B?", isinstance(c, B)  # True (odd?) 
    3656    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