Popular Python recipes tagged "oop"http://code.activestate.com/recipes/langs/python/tags/oop/2016-07-31T04:03:29-07:00ActiveState Code RecipesEmulating super() in Python 3.x using Python 2.7 (Python)
2016-07-31T04:03:29-07:00sunqingyaohttp://code.activestate.com/recipes/users/4194518/http://code.activestate.com/recipes/580694-emulating-super-in-python-3x-using-python-27/
<p style="color: grey">
Python
recipe 580694
by <a href="/recipes/users/4194518/">sunqingyao</a>
(<a href="/recipes/tags/beginner/">beginner</a>, <a href="/recipes/tags/descriptor/">descriptor</a>, <a href="/recipes/tags/metaclass/">metaclass</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/python2/">python2</a>).
</p>
<p>Depending on the name of the first argument, <code>self.__sup</code> or <code>cls.__sup</code> behaves like <code>super()</code> in Python 3, while this code is written in Python 2.7.</p>
<p>It works for both ordinary methods and class methods(static methods don't use <code>super()</code>). See my code for detailed examples:</p>
Python method chaining examples (Python)
2016-02-25T19:40:33-08:00Vasudev Ramhttp://code.activestate.com/recipes/users/4173351/http://code.activestate.com/recipes/580616-python-method-chaining-examples/
<p style="color: grey">
Python
recipe 580616
by <a href="/recipes/users/4173351/">Vasudev Ram</a>
(<a href="/recipes/tags/chaining/">chaining</a>, <a href="/recipes/tags/methods/">methods</a>, <a href="/recipes/tags/object/">object</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/python/">python</a>).
</p>
<p>This recipe shows a few examples of doing method chaining in Python.</p>
Wrap a a file-like object in another that calls a user callback whenever read() is called on it. (Python)
2013-09-25T01:54:53-07:00Martin Millerhttp://code.activestate.com/recipes/users/155538/http://code.activestate.com/recipes/578674-wrap-a-a-file-like-object-in-another-that-calls-a-/
<p style="color: grey">
Python
recipe 578674
by <a href="/recipes/users/155538/">Martin Miller</a>
(<a href="/recipes/tags/callback/">callback</a>, <a href="/recipes/tags/file/">file</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/progress/">progress</a>, <a href="/recipes/tags/upload/">upload</a>).
</p>
<p>Wraps a file-like object in another, but also calls a user callback with the number of bytes read whenever its <code>read()</code> method is called. Used for tracking upload progress, for example for a progress bar in a UI application.</p>
Observer Pattern (Python)
2013-03-09T10:03:10-08:00Mauro B. Bianchttp://code.activestate.com/recipes/users/4185493/http://code.activestate.com/recipes/578484-observer-pattern/
<p style="color: grey">
Python
recipe 578484
by <a href="/recipes/users/4185493/">Mauro B. Bianc</a>
(<a href="/recipes/tags/cascade/">cascade</a>, <a href="/recipes/tags/observer/">observer</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/pattern/">pattern</a>, <a href="/recipes/tags/patterns/">patterns</a>, <a href="/recipes/tags/setattr/">setattr</a>, <a href="/recipes/tags/__setattr__/">__setattr__</a>).
Revision 2.
</p>
<p>This is a Python implementation of the observer pattern described by Gamma et. al.
It defines a one-to many dependency between objects so that when one object changes state,
all its dependents (i.e. observers) are notified and updated automatically.</p>
<p>My adaptation gets rid of the need to use specific functions to set the data (and to call Notify)
and allows you to be notified for ANY attribute you set.
It is possible to specify a list of attributes which should not trigger a notification.
In case you need the opposite, it is very easy to invert the behavior of the code.</p>
<p>The example should output:
Creating data1 without notification for attrs name & surname <br />
Creating data2 without notification for attr age <br />
Setting data1.name=Heather - Notification unnecessary <br />
Setting data1.num=333 - Notification expected <br />
Observer1: Subject Heather has updated attr num to 333 <br />
Setting data2.name=Molly - Notification expected <br />
Observer2: Subject Molly has updated attr name to Molly <br />
Setting data2.age=28 - Notification unnecessary <br />
Setting data2.eyecolor=blue - Notification expected <br />
Observer2: Subject Molly has updated attr eyecolor to blue </p>
Observer Pattern (Python)
2013-02-04T20:55:10-08:00Ilya Pashchenkohttp://code.activestate.com/recipes/users/4185152/http://code.activestate.com/recipes/578449-observer-pattern/
<p style="color: grey">
Python
recipe 578449
by <a href="/recipes/users/4185152/">Ilya Pashchenko</a>
(<a href="/recipes/tags/oop/">oop</a>).
</p>
<p>This is a Python implementation of the observer pattern described by Gamma et. al. It defines a one-to many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.</p>
<p>The example should output:
Setting Data 1 = 10
DecimalViewer: Subject Data 1 has data 10
HexViewer: Subject Data 1 has data 0xa
Setting Data 2 = 15
HexViewer: Subject Data 2 has data 0xf
DecimalViewer: Subject Data 2 has data 15
Setting Data 1 = 3
DecimalViewer: Subject Data 1 has data 3
HexViewer: Subject Data 1 has data 0x3
Setting Data 2 = 5
HexViewer: Subject Data 2 has data 0x5
DecimalViewer: Subject Data 2 has data 5
Detach HexViewer from data1 and data2.
Setting Data 1 = 10
DecimalViewer: Subject Data 1 has data 10
Setting Data 2 = 15
DecimalViewer: Subject Data 2 has data 15</p>
Factory pattern (Python)
2013-02-04T21:12:27-08:00Ilya Pashchenkohttp://code.activestate.com/recipes/users/4185152/http://code.activestate.com/recipes/578450-factory-pattern/
<p style="color: grey">
Python
recipe 578450
by <a href="/recipes/users/4185152/">Ilya Pashchenko</a>
(<a href="/recipes/tags/oop/">oop</a>).
</p>
<p>In the factory pattern you have an object that creates other objects.</p>
Python: A event/signal dispatcher (Python)
2013-07-29T05:34:24-07:00Esteban Castro Borsanihttp://code.activestate.com/recipes/users/4184010/http://code.activestate.com/recipes/578307-python-a-eventsignal-dispatcher/
<p style="color: grey">
Python
recipe 578307
by <a href="/recipes/users/4184010/">Esteban Castro Borsani</a>
(<a href="/recipes/tags/dispatcher/">dispatcher</a>, <a href="/recipes/tags/events/">events</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/python/">python</a>, <a href="/recipes/tags/signals/">signals</a>).
</p>
<p>This is a thread-safe dispatcher.</p>
Bound Method Weakref (Python)
2013-07-29T05:35:55-07:00Esteban Castro Borsanihttp://code.activestate.com/recipes/users/4184010/http://code.activestate.com/recipes/578298-bound-method-weakref/
<p style="color: grey">
Python
recipe 578298
by <a href="/recipes/users/4184010/">Esteban Castro Borsani</a>
(<a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/python/">python</a>, <a href="/recipes/tags/weakref/">weakref</a>).
Revision 4.
</p>
<p>This is a workaorund for weak reference bound methods. It may be useful for observer patterns.</p>
Singleton? We don't need no stinkin' singleton: the Borg design pattern (Python)
2011-09-18T18:47:59-07:00Anler Hernández Peralhttp://code.activestate.com/recipes/users/4176323/http://code.activestate.com/recipes/577870-singleton-we-dont-need-no-stinkin-singleton-the-bo/
<p style="color: grey">
Python
recipe 577870
by <a href="/recipes/users/4176323/">Anler Hernández Peral</a>
(<a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/pattern/">pattern</a>).
</p>
<p>The Singleton design pattern (DP) has a catchy name, but the wrong focus -- on identity rather than on state. The Borg design pattern has all instances share state instead, and Python makes it, literally, a snap.</p>
Concrete Class Finder (Python)
2011-08-24T05:29:15-07:00Lucio Santihttp://code.activestate.com/recipes/users/4178886/http://code.activestate.com/recipes/577858-concrete-class-finder/
<p style="color: grey">
Python
recipe 577858
by <a href="/recipes/users/4178886/">Lucio Santi</a>
(<a href="/recipes/tags/case/">case</a>, <a href="/recipes/tags/class/">class</a>, <a href="/recipes/tags/design/">design</a>, <a href="/recipes/tags/finder/">finder</a>, <a href="/recipes/tags/match/">match</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/pattern/">pattern</a>, <a href="/recipes/tags/suitable/">suitable</a>, <a href="/recipes/tags/switch/">switch</a>).
</p>
<p>This recipe implements a design pattern useful for performing an object-oriented case analysis for a particular object (or a collection of objects as well). Essentially, it is an alternative to complex if-then-else or switches. Modelling each case with a particular class, the Concrete Class Finder searches for an appropriate case/class that applies to the given object/s. Once found, this class can be used in an homogeneous way, independently of the object/s previously considered.</p>
Cache decorator in python 2.4 (Python)
2011-08-08T00:10:51-07:00sivarama sarmahttp://code.activestate.com/recipes/users/4178890/http://code.activestate.com/recipes/577827-cache-decorator-in-python-24/
<p style="color: grey">
Python
recipe 577827
by <a href="/recipes/users/4178890/">sivarama sarma</a>
(<a href="/recipes/tags/oop/">oop</a>).
</p>
<p>The latest version of Python introduced a new language feature, function and method decorators (PEP 318, <a href="http://www.python.org/peps/pep-0318.html" rel="nofollow">http://www.python.org/peps/pep-0318.html</a>). This recipe show a common callable transformation that can benefit from the new syntax, often referred to as Memoization pattern.</p>
Infix operators (Python)
2011-06-06T12:07:00-07:00Animesh Kumarhttp://code.activestate.com/recipes/users/4178212/http://code.activestate.com/recipes/577738-infix-operators/
<p style="color: grey">
Python
recipe 577738
by <a href="/recipes/users/4178212/">Animesh Kumar</a>
(<a href="/recipes/tags/oop/">oop</a>).
</p>
<p>Python has the wonderful "in" operator and it would be nice to have additional infix operator like this. This recipe shows how (almost) arbitrary infix operators can be defined.</p>
Item Properties (Python)
2012-05-09T23:24:55-07:00Ian Kellyhttp://code.activestate.com/recipes/users/4178016/http://code.activestate.com/recipes/577703-item-properties/
<p style="color: grey">
Python
recipe 577703
by <a href="/recipes/users/4178016/">Ian Kelly</a>
(<a href="/recipes/tags/decorator/">decorator</a>, <a href="/recipes/tags/descriptor/">descriptor</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/property/">property</a>).
Revision 2.
</p>
<p>A property variation that allows property access using an index or key.</p>
Infix operators (Python)
2005-02-17T11:12:04-08:00Ferdinand Jamitzkyhttp://code.activestate.com/recipes/users/98863/http://code.activestate.com/recipes/384122-infix-operators/
<p style="color: grey">
Python
recipe 384122
by <a href="/recipes/users/98863/">Ferdinand Jamitzky</a>
(<a href="/recipes/tags/oop/">oop</a>).
Revision 3.
</p>
<p>Python has the wonderful "in" operator and it would be nice to have additional infix operator like this. This recipe shows how (almost) arbitrary infix operators can be defined.</p>
Attribute-based Framework 1: Basics (Python)
2010-07-21T21:40:54-07:00Jack Trainorhttp://code.activestate.com/recipes/users/4076953/http://code.activestate.com/recipes/577327-attribute-based-framework-1-basics/
<p style="color: grey">
Python
recipe 577327
by <a href="/recipes/users/4076953/">Jack Trainor</a>
(<a href="/recipes/tags/educational/">educational</a>, <a href="/recipes/tags/framework/">framework</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/simulation/">simulation</a>).
Revision 2.
</p>
<p>I am adapting Prof. David Cheriton's OO software methodology to Python. It's an approach for building industrial-strength code with a disciplined architecture, consistent naming conventions, and a rigorous division of interface from implementation. I'll be adding more of his techniques in further recipes. These recipes are based on Cheriton's CS249a course at Stanford.</p>
Attribute-based Framework 2: Notifications (Python)
2010-07-23T20:12:10-07:00Jack Trainorhttp://code.activestate.com/recipes/users/4076953/http://code.activestate.com/recipes/577330-attribute-based-framework-2-notifications/
<p style="color: grey">
Python
recipe 577330
by <a href="/recipes/users/4076953/">Jack Trainor</a>
(<a href="/recipes/tags/educational/">educational</a>, <a href="/recipes/tags/framework/">framework</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/simulation/">simulation</a>).
Revision 2.
</p>
<p>I am adapting Prof. David Cheriton's OO software methodology to Python. It's an approach for building industrial-strength code with a disciplined architecture, consistent naming conventions, and a rigorous division of interface from implementation. I'll be adding more of his techniques in further recipes. These recipes are based on Cheriton's CS249a course at Stanford.</p>
Default arg special action (Python)
2010-04-14T19:52:33-07:00Ed Blakehttp://code.activestate.com/recipes/users/4173678/http://code.activestate.com/recipes/577194-default-arg-special-action/
<p style="color: grey">
Python
recipe 577194
by <a href="/recipes/users/4173678/">Ed Blake</a>
(<a href="/recipes/tags/default_arguments/">default_arguments</a>, <a href="/recipes/tags/identity/">identity</a>, <a href="/recipes/tags/oop/">oop</a>).
</p>
<p>A way to allow functions with 0, 1, and -1 arguments! For those times you want to differentiate a no value argument from a non-value argument.</p>
Calculations on huge (memmap-)arrays (Python)
2009-05-05T10:19:37-07:00d.schlabinghttp://code.activestate.com/recipes/users/4168903/http://code.activestate.com/recipes/576739-calculations-on-huge-memmap-arrays/
<p style="color: grey">
Python
recipe 576739
by <a href="/recipes/users/4168903/">d.schlabing</a>
(<a href="/recipes/tags/memmap/">memmap</a>, <a href="/recipes/tags/numpy/">numpy</a>, <a href="/recipes/tags/oop/">oop</a>).
Revision 2.
</p>
<p>This is a way of doing calculations on whole arrays that might be to big to fit into memory.</p>
Curious Recursive Decorator Pattern (Python)
2009-05-16T10:00:22-07:00Y Shttp://code.activestate.com/recipes/users/4169767/http://code.activestate.com/recipes/576758-curious-recursive-decorator-pattern/
<p style="color: grey">
Python
recipe 576758
by <a href="/recipes/users/4169767/">Y S</a>
(<a href="/recipes/tags/decorator/">decorator</a>, <a href="/recipes/tags/oop/">oop</a>).
Revision 3.
</p>
<p>There are <strong>no</strong> ABCs for ordering operations.
This is because the recursive class difinition like:</p>
<pre class="prettyprint"><code> class Derived(XXX(Derived)):
</code></pre>
<p>is invalid syntax. This recipe implements an ABC ordering class with using decorator.</p>
Easy State Pattern - support for implementing state machines (Python)
2009-06-15T11:25:17-07:00Rodney Drenthhttp://code.activestate.com/recipes/users/4050661/http://code.activestate.com/recipes/576613-easy-state-pattern-support-for-implementing-state-/
<p style="color: grey">
Python
recipe 576613
by <a href="/recipes/users/4050661/">Rodney Drenth</a>
(<a href="/recipes/tags/algorithms/">algorithms</a>, <a href="/recipes/tags/decorators/">decorators</a>, <a href="/recipes/tags/metaclasses/">metaclasses</a>, <a href="/recipes/tags/oop/">oop</a>, <a href="/recipes/tags/state_machine/">state_machine</a>, <a href="/recipes/tags/state_pattern/">state_pattern</a>).
Revision 3.
</p>
<p>Provides is a module that gives support for implementing state machines. States are implemented as subclasses, derived from the state machine class. Methods that are state dependant or which cause transitions are declared using decorators. Because states can be subclasses of other states, common behaviour among several states is easily supported. The implementation allows for implementing multiple states or substates within a class.</p>
<p>This module best support statem achines implemeting controllers for embedded systems, implementing user interfaces, or in discrete event model simulation.
Parsers, which generally have many states and where you would need to define
a Transaction method for each different character encountered would be more easily implemented by other means.</p>