From: "Nathan Clegg" <nathan@geerbox.com> > >>>>> "Oren" == Oren Tirosh <oren-py-d@hishome.net> writes: > > Oren> I would like to be able to declare that I need an object > Oren> with a specific interface even if the object was written > Oren> long before and I don't want to modify an existing library > Oren> just to make it conform to my interface names. > > class InterfaceWrapper(ExistingClass, AbstractInterfaceClass): > pass > > I'm not saying this is a good idea :), but I believe this problem is > already solvable in the current language. The wrapper class should > pass the test of isinstance for the interface class, but the existing > class as the first parent should implement all of the calls. > > Note that most other languages that actually support proper interfaces > (i.e. Java) would have similar trouble adding an interface to a prior > existing class without modifying its definition. Python actually > provides a much simpler solution than others might, it seems to me. The problem is that we want to use ExistingClass *objects* where AbstractInterfaceClass is required. If someone else has written a module containing: def some_fantastic_function(AbstractInterfaceClass: x) ... And I have written a function: def my_func(generator) for x in generator: some_fantastic_function(x) If there's a generator lying about which produces ExistingClass, I ought to be able to pass it to my_func. ----------------------------------------------------------- David Abrahams * Boost Consulting dave@boost-consulting.com * http://www.boost-consulting.com
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4