[Twisted-Python] Disturbing aspect of zope.interface
Hi, I know this is not the zope list, but I am encountering this in a twisted project, so I wanted to get some ideas here first. I am finding that zope.interface is like an infectious disease. Here is a simple example: In [35]: import zope.interface as zi In [37]: class A(object): ....: pass In [38]: class IB(zi.Interface): ....: pass In [39]: hasattr(A, '__provides__') Out[39]: False In [41]: # Inheriting from A gives A additional methods In [42]: class B(A): ....: zi.implements(IB) In [43]: hasattr(A, '__provides__') Out[43]: True In [45]: # C is clean of the additional methods In [46]: class C(object): ....: pass In [47]: hasattr(C, '__provides__') Out[47]: False The disturbing thing is that now A (which is just an object) has been hacked on by zope.interface. It has additional methods (__provides__, etc.) that are specific to zope. Summary: If a class A is later subclassed by something B that calls zi.implements, the original class A becomes infected with all the zope.interface stuff. Is there a way to avoid this? Doesn't this seem like a bad idea? Cheers, Brian
participants (9)
-
Brian Granger
-
exarkun@twistedmatrix.com
-
Glyph Lefkowitz
-
Itamar Turner-Trauring (aka Shtull-Trauring)
-
James Y Knight
-
Mark Visser
-
Matt Perry
-
Steve Steiner (listsin)
-
Tim Allen