Top-rated recipes tagged "extending"http://code.activestate.com/recipes/tags/extending/top/2012-01-13T07:56:29-08:00ActiveState Code RecipesReadable switch construction without lambdas or dictionaries (Python)
2005-04-26T10:51:04-07:00Brian Beckhttp://code.activestate.com/recipes/users/2425329/http://code.activestate.com/recipes/410692-readable-switch-construction-without-lambdas-or-di/
<p style="color: grey">
Python
recipe 410692
by <a href="/recipes/users/2425329/">Brian Beck</a>
(<a href="/recipes/tags/extending/">extending</a>).
Revision 8.
</p>
<p>Python's lack of a 'switch' statement has garnered much discussion and even a PEP. The most popular substitute uses dictionaries to map cases to functions, which requires lots of defs or lambdas. While the approach shown here may be O(n) for cases, it aims to duplicate C's original 'switch' functionality and structure with reasonable accuracy.</p>
Find all subclasses of a given class (Python)
2009-11-04T20:26:08-08:00Gabriel Genellinahttp://code.activestate.com/recipes/users/924636/http://code.activestate.com/recipes/576949-find-all-subclasses-of-a-given-class/
<p style="color: grey">
Python
recipe 576949
by <a href="/recipes/users/924636/">Gabriel Genellina</a>
(<a href="/recipes/tags/class/">class</a>, <a href="/recipes/tags/extending/">extending</a>, <a href="/recipes/tags/inheritance/">inheritance</a>, <a href="/recipes/tags/plugin/">plugin</a>, <a href="/recipes/tags/subclass/">subclass</a>, <a href="/recipes/tags/subclasses/">subclasses</a>, <a href="/recipes/tags/type/">type</a>).
Revision 3.
</p>
<p>itersubclasses(cls) returns a generator over all subclasses of cls, in depth first order. cls must be a new-style class; old-style classes are <em>not</em> supported.</p>
Container (Python)
2006-05-13T07:37:50-07:00tomer filibahttp://code.activestate.com/recipes/users/2520014/http://code.activestate.com/recipes/496697-container/
<p style="color: grey">
Python
recipe 496697
by <a href="/recipes/users/2520014/">tomer filiba</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>A generic attribute container, with pretty printing and recursion protection</p>
Python distutils + pkg-config (Python)
2007-02-26T23:14:40-08:00Micah Dowtyhttp://code.activestate.com/recipes/users/4037444/http://code.activestate.com/recipes/502261-python-distutils-pkg-config/
<p style="color: grey">
Python
recipe 502261
by <a href="/recipes/users/4037444/">Micah Dowty</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>This is a short and sweet recipe for using pkg-config with your distutils extension modules.</p>
Object Proxying (Python)
2006-05-26T03:44:09-07:00tomer filibahttp://code.activestate.com/recipes/users/2520014/http://code.activestate.com/recipes/496741-object-proxying/
<p style="color: grey">
Python
recipe 496741
by <a href="/recipes/users/2520014/">tomer filiba</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>transparent object proxying for (almost) all objects.</p>
Windows Dll (with pointers parameters) calling with ctypes and calldll (Python)
2004-11-07T16:53:38-08:00Stefano Spinuccihttp://code.activestate.com/recipes/users/787328/http://code.activestate.com/recipes/181063-windows-dll-with-pointers-parameters-calling-with-/
<p style="color: grey">
Python
recipe 181063
by <a href="/recipes/users/787328/">Stefano Spinucci</a>
(<a href="/recipes/tags/extending/">extending</a>).
Revision 3.
</p>
<p>Code to call a Windows Dll """void FAR PASCAL hllapi(int FAR *, char FAR *, int FAR *, int FAR *)""" with ctypes (trivial) and calldll (a nightmare).</p>
Defining Python class methods in C (Python)
2001-04-25T10:22:15-07:00Brent Burleyhttp://code.activestate.com/recipes/users/98036/http://code.activestate.com/recipes/54352-defining-python-class-methods-in-c/
<p style="color: grey">
Python
recipe 54352
by <a href="/recipes/users/98036/">Brent Burley</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>This recipe shows how to define a new Python class from a C extension module. The class methods are implemented
in C, but the class can still be instantiated, extended, subclassed, etc. from Python. The same technique can also
be used to extend an existing Python class with methods written in C.</p>
weakmethod (Python)
2006-09-29T01:45:31-07:00tomer filibahttp://code.activestate.com/recipes/users/2520014/http://code.activestate.com/recipes/498147-weakmethod/
<p style="color: grey">
Python
recipe 498147
by <a href="/recipes/users/2520014/">tomer filiba</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>Weakly-bound methods: use this decorator to create methods that weakly-reference their instance (im_self). This means that the method itself will not keep the object alive. Useful for callbacks, caches, and avoiding cyclic references.</p>
ExceptionContainer (Python)
2006-05-13T07:43:50-07:00tomer filibahttp://code.activestate.com/recipes/users/2520014/http://code.activestate.com/recipes/496698-exceptioncontainer/
<p style="color: grey">
Python
recipe 496698
by <a href="/recipes/users/2520014/">tomer filiba</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>an Exception base-class that supports keyword arguments and pretty printing</p>
Automatic ref-count management in C++ using a smart ptr (Python)
2007-08-14T15:41:44-07:00Ian Eloffhttp://code.activestate.com/recipes/users/2227021/http://code.activestate.com/recipes/528875-automatic-ref-count-management-in-c-using-a-smart-/
<p style="color: grey">
Python
recipe 528875
by <a href="/recipes/users/2227021/">Ian Eloff</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>Managing ref-counting is a complex and error prone business. If you choose C++ to extend or embed Python, you can simply use a modification on std::auto_ptr. Instead of calling delete on the managed pointer, it will decref it.</p>
<p>So now you can do:</p>
<p>auto_py str = PyStr_FromString("Hello World!");</p>
<p>and forget about having to decref it altogether! Just like auto_ptr you can get the PyObject * with get(), release it from managed control with release(), and rebind it with reset(new_ptr). You can also incref it by calling inc(), but be cautious as you can easily create a leak by increfing once to much.</p>
subscriptable generator (Python)
2007-07-08T11:00:48-07:00Andrew Moffathttp://code.activestate.com/recipes/users/2979564/http://code.activestate.com/recipes/523026-subscriptable-generator/
<p style="color: grey">
Python
recipe 523026
by <a href="/recipes/users/2979564/">Andrew Moffat</a>
(<a href="/recipes/tags/extending/">extending</a>).
Revision 4.
</p>
<p>let's you define a generator with an internal cache that can be accessed like a list</p>
A more clean implementation for Ordered Dictionary (Python)
2006-05-31T20:56:26-07:00Igor Ghisihttp://code.activestate.com/recipes/users/2907747/http://code.activestate.com/recipes/496761-a-more-clean-implementation-for-ordered-dictionary/
<p style="color: grey">
Python
recipe 496761
by <a href="/recipes/users/2907747/">Igor Ghisi</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>An Ordered Dict records the order in which items are added. This implementation uses much less code than the others by extending not well-known class DictMixin.</p>
ShelfProxy (Python)
2006-05-26T14:40:18-07:00tomer filibahttp://code.activestate.com/recipes/users/2520014/http://code.activestate.com/recipes/496742-shelfproxy/
<p style="color: grey">
Python
recipe 496742
by <a href="/recipes/users/2520014/">tomer filiba</a>
(<a href="/recipes/tags/extending/">extending</a>).
Revision 2.
</p>
<p>Uses object proxying to expose a more intuitive interface to shelves. Requires the Proxy recipe (<a href="http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496741%29." rel="nofollow">http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/496741).</a></p>
Import Modules/Discover methods from a directory name (Python)
2005-07-15T13:15:48-07:00Jesse Nollerhttp://code.activestate.com/recipes/users/2519072/http://code.activestate.com/recipes/436873-import-modulesdiscover-methods-from-a-directory-na/
<p style="color: grey">
Python
recipe 436873
by <a href="/recipes/users/2519072/">Jesse Noller</a>
(<a href="/recipes/tags/extending/">extending</a>).
Revision 2.
</p>
<p>For something I am working on, I needed the ability to scan a supplied directory, adding the directory to the sys.path within Python, and then blanket import the modules within that directory. Following that, I had to filter any builtin or special methods within those modules and return a list of the methods for the module I had imported.</p>
<p>The script is very simplistic in what it does.</p>
Simple Singleton (Python)
2005-04-28T12:14:52-07:00Daniel Brodiehttp://code.activestate.com/recipes/users/1892511/http://code.activestate.com/recipes/412551-simple-singleton/
<p style="color: grey">
Python
recipe 412551
by <a href="/recipes/users/1892511/">Daniel Brodie</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>This is an implementation of the singleton without using the __new__ class but by implementing the __call__ method in the metaclass.</p>
Functions with Strictly Typed Arguments (Python)
2004-11-05T08:32:24-08:00S Whttp://code.activestate.com/recipes/users/1759688/http://code.activestate.com/recipes/325917-functions-with-strictly-typed-arguments/
<p style="color: grey">
Python
recipe 325917
by <a href="/recipes/users/1759688/">S W</a>
(<a href="/recipes/tags/extending/">extending</a>).
Revision 3.
</p>
<p>This fun little recipe uses Python 2.4 decorators to force function arguments to be of a specified type. If a type mismatch occurs, a TypeError is raised.</p>
<p>It fun, cheap, and dirty. And probably nasty.</p>
A simple extension type for Python (Python)
2001-08-15T16:35:12-07:00Alex Martellihttp://code.activestate.com/recipes/users/97991/http://code.activestate.com/recipes/66509-a-simple-extension-type-for-python/
<p style="color: grey">
Python
recipe 66509
by <a href="/recipes/users/97991/">Alex Martelli</a>
(<a href="/recipes/tags/extending/">extending</a>).
Revision 2.
</p>
<p>C-coded Python extension types have an aura of mystery and difficulty they don't really deserve. Sure, it's a lot of work to implement every possible nicety, but a fundamental useful type doesn't take much.</p>
Use good old INI files for configuration (Python)
2001-06-25T05:00:24-07:00Dirk Holtwickhttp://code.activestate.com/recipes/users/98196/http://code.activestate.com/recipes/65334-use-good-old-ini-files-for-configuration/
<p style="color: grey">
Python
recipe 65334
by <a href="/recipes/users/98196/">Dirk Holtwick</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>Many people use Python modules as config files, but this way your program may be manipulated or an syntax error may come into that file. Try the small script here to use the good old INI config files, known from Windows.</p>
Lazy Load Object Proxying (Python)
2012-01-13T07:56:29-08:00Cory Virokhttp://code.activestate.com/recipes/users/4180495/http://code.activestate.com/recipes/578014-lazy-load-object-proxying/
<p style="color: grey">
Python
recipe 578014
by <a href="/recipes/users/4180495/">Cory Virok</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>A very slight modification on Tomer Filiba's original Proxy class to use a factory function instead of an instance to create an object proxy the first time it is required. The only other modification is to add an instance variable to LazyLoadProxy to store data specific to the proxy and not the delegated instance. </p>
Automatic Python PyObject ref-count management in C++ using a smart ptr (C++)
2011-12-19T15:24:03-08:00samhhttp://code.activestate.com/recipes/users/4180289/http://code.activestate.com/recipes/577985-automatic-python-pyobject-ref-count-management-in-/
<p style="color: grey">
C++
recipe 577985
by <a href="/recipes/users/4180289/">samh</a>
(<a href="/recipes/tags/extending/">extending</a>).
</p>
<p>Managing ref-counting is a complex and error prone business. If you choose C++ to extend or embed Python, you can simply use a modification on <code>std::auto_ptr</code>. Instead of calling delete on the managed pointer, it will decref it.</p>
<p>So now you can do:</p>
<pre class="prettyprint"><code>auto_pyptr pyHelloStr(PyStr_FromString("Hello World!"));
</code></pre>
<p>and forget about having to decref it altogether! Just like <code>auto_ptr</code> you can get the <code>PyObject *</code> with <code>get()</code>, release it from managed control with <code>release()</code>, and rebind it with <code>reset(new_ptr)</code>. You can also incref it by calling <code>inc()</code>, but be cautious as you can easily create a leak by increfing once to much.</p>