How to change layers priority?

The code below shows an example how to change the iro (= "Interface Resolution Order"):

from zope.interface import Interface, alsoProvides

class I1(Interface): pass

class I2(Interface): pass

class C(object): pass

c=C()
alsoProvides(c, I1)
alsoProvides(c, I2)
print c.__provides__.__iro__
c.__provides__ = type(c.__provides__)(
  c.__class__,
  *((I2,) + tuple(i for i in c.__provides__.__iro__ if i is not I2))
  )
print c.__provides__.__iro__
1 Like