<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Dynamic_Classes_in_Python</id>
	<title>Dynamic Classes in Python - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://performiq.com/kb/index.php?action=history&amp;feed=atom&amp;title=Dynamic_Classes_in_Python"/>
	<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Dynamic_Classes_in_Python&amp;action=history"/>
	<updated>2026-05-18T17:21:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Dynamic_Classes_in_Python&amp;diff=2167&amp;oldid=prev</id>
		<title>PeterHarding at 07:33, 24 May 2008</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Dynamic_Classes_in_Python&amp;diff=2167&amp;oldid=prev"/>
		<updated>2008-05-24T07:33:42Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:33, 24 May 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Line 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;#!/usr/bin/env python&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;## Factory for dynamic classes&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;## Factory for dynamic classes&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l67&quot;&gt;Line 67:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;#!/usr/bin/env python&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;##&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;## Dynamic Class - we will be create it dynamicaly :)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;## Dynamic Class - we will be create it dynamicaly :)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
	<entry>
		<id>https://performiq.com/kb/index.php?title=Dynamic_Classes_in_Python&amp;diff=2166&amp;oldid=prev</id>
		<title>PeterHarding: New page: =DynamicClassFactory.py=  &lt;pre&gt; ## ## Factory for dynamic classes ## $Id: DynamicClassFactory.py 1.1 1997/10/27 13:07:23 gandalf Exp $ ## $Log: DynamicClassFactory.py $ ## Revision 1.1  19...</title>
		<link rel="alternate" type="text/html" href="https://performiq.com/kb/index.php?title=Dynamic_Classes_in_Python&amp;diff=2166&amp;oldid=prev"/>
		<updated>2008-05-24T07:33:15Z</updated>

		<summary type="html">&lt;p&gt;New page: =DynamicClassFactory.py=  &amp;lt;pre&amp;gt; ## ## Factory for dynamic classes ## $Id: DynamicClassFactory.py 1.1 1997/10/27 13:07:23 gandalf Exp $ ## $Log: DynamicClassFactory.py $ ## Revision 1.1  19...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=DynamicClassFactory.py=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
## Factory for dynamic classes&lt;br /&gt;
## $Id: DynamicClassFactory.py 1.1 1997/10/27 13:07:23 gandalf Exp $&lt;br /&gt;
## $Log: DynamicClassFactory.py $&lt;br /&gt;
## Revision 1.1  1997/10/27 13:07:23  gandalf&lt;br /&gt;
## Initial revision&lt;br /&gt;
##&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
__doc__ = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
Factory class for  dynamic classes. Support a generate a object instance and receive a methods&lt;br /&gt;
or class instance&lt;br /&gt;
addClasses                        Add a DynamicClass&amp;#039;es into factory&lt;br /&gt;
_addClasses                       same, but accept a tuple&lt;br /&gt;
addClass                          Add a single DynamicClass&lt;br /&gt;
delClass                          delete a single class&lt;br /&gt;
delClasses                        delete few classes&lt;br /&gt;
getMethod                         Return a &amp;#039;pointer&amp;#039; to method by &amp;#039;Class.method&amp;#039;&lt;br /&gt;
__getitem__                       Return a class instance&lt;br /&gt;
__call__                          Return a object instance&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
class DynamicClassFactory:&lt;br /&gt;
    def __init__(self, *_dynclasses):&lt;br /&gt;
	self.__dclasses__ = {}&lt;br /&gt;
	self.__dclassinst__ = {}&lt;br /&gt;
	self._addClasses(_dynclasses)&lt;br /&gt;
    def _addClasses(self, _dynclasses):&lt;br /&gt;
	for i in _dynclasses:&lt;br /&gt;
	    self.addClass(i)&lt;br /&gt;
    def addClasses(self, *_dynclasses):&lt;br /&gt;
	for i in _dynclasses:&lt;br /&gt;
	    self.addClass(i)&lt;br /&gt;
    def addClass(self, _dynclass):&lt;br /&gt;
	self.__dclasses__[_dynclass.name()] = _dynclass&lt;br /&gt;
	_dynclass.setFactory(self)&lt;br /&gt;
	self.__dclassinst__[_dynclass.name()] = _dynclass.do()&lt;br /&gt;
    __add__ = addClass&lt;br /&gt;
    def delClass(self, _name):&lt;br /&gt;
	try:&lt;br /&gt;
	    del self.__dclasses__[_name]&lt;br /&gt;
	    del self.__dclassesinst__[_name]&lt;br /&gt;
	except KeyError:&lt;br /&gt;
	    return&lt;br /&gt;
    def delClasses(self, *_names):&lt;br /&gt;
	for i in _names:&lt;br /&gt;
	    self.delClass(i)&lt;br /&gt;
    def getMethod(self, _pointer):&lt;br /&gt;
	import string&lt;br /&gt;
	_cla_nam = string.split(string.strip(_pointer), &amp;#039;.&amp;#039;)&lt;br /&gt;
	if len(_cla_nam) &amp;lt; 2:&lt;br /&gt;
	    return None&lt;br /&gt;
	try:&lt;br /&gt;
	    return self.__dclassinst__[_cla_nam[0]].__dict__[_cla_nam[1]]&lt;br /&gt;
	except (KeyError, AttributeError):&lt;br /&gt;
	    return None&lt;br /&gt;
    def __getitem__(self, key):&lt;br /&gt;
	return self.__dclassinst__[key]&lt;br /&gt;
    def __call__(self, key, *args, **kw):&lt;br /&gt;
	return apply(self[key],args,kw)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=DynamicClass.py=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
## Dynamic Class - we will be create it dynamicaly :)&lt;br /&gt;
## $Id: DynamicClass.py 1.2 1997/10/27 13:01:30 gandalf Exp $&lt;br /&gt;
## $Log: DynamicClass.py $&lt;br /&gt;
## Revision 1.2  1997/10/27 13:01:30  gandalf&lt;br /&gt;
## Add a __doc__ string&lt;br /&gt;
##&lt;br /&gt;
## Revision 1.1  1997/10/27 12:58:49  gandalf&lt;br /&gt;
## Initial revision&lt;br /&gt;
##&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
import new&lt;br /&gt;
&lt;br /&gt;
__doc__ = &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
This class are collect a description of dynamic class and generate a class instance&lt;br /&gt;
setFactory                                    set a DynamicClassFactory for&lt;br /&gt;
                                              this DynamicClass&lt;br /&gt;
do                                            generate class instance&lt;br /&gt;
name                                          return classname&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class DynamicClass:&lt;br /&gt;
    def __init__(self, _classname, _methods = {}, _vars={},_baseclasses = (), _docstring=&amp;#039;&amp;#039;):&lt;br /&gt;
	self.__classname__   = _classname&lt;br /&gt;
	self.__classdict__   = _methods&lt;br /&gt;
	self.__vars__        = _vars&lt;br /&gt;
	self.__baseclasses__ = _baseclasses&lt;br /&gt;
	self.__docstring__   = _docstring&lt;br /&gt;
	self.__factory__     = None&lt;br /&gt;
    def setFactory(self, _factory):&lt;br /&gt;
	self.__factory__     = _factory&lt;br /&gt;
    def do(self):&lt;br /&gt;
	import string&lt;br /&gt;
	_odct = {&amp;#039;__name__&amp;#039;:self.__classname__,&amp;#039;__doc__&amp;#039;:self.__docstring__}&lt;br /&gt;
	for i in self.__vars__.keys():&lt;br /&gt;
	    _odct[i] = self.__vars__[i]&lt;br /&gt;
	_unbounds = []&lt;br /&gt;
	for i in self.__classdict__.keys():&lt;br /&gt;
	    _mod_nam = string.split(string.strip(self.__classdict__[i]), &amp;#039;!&amp;#039;)&lt;br /&gt;
	    if len(_mod_nam) &amp;lt; 2:&lt;br /&gt;
		_odct[i] = self.__factory__.getMethod(self.__classdict__[i])&lt;br /&gt;
		if _odct[i] == None:&lt;br /&gt;
		    del _odct[i]&lt;br /&gt;
		    continue&lt;br /&gt;
	    try:&lt;br /&gt;
		exec (&amp;#039;import %s&amp;#039;%_mod_nam[0])&lt;br /&gt;
	    except ImportError:&lt;br /&gt;
		continue&lt;br /&gt;
	    try:&lt;br /&gt;
		exec (&amp;quot;_odct[i] = %s.%s&amp;quot;%(_mod_nam[0],_mod_nam[1]))&lt;br /&gt;
	    except AttributeError:&lt;br /&gt;
		continue&lt;br /&gt;
	_bcrec = ()&lt;br /&gt;
	for i in self.__baseclasses__:&lt;br /&gt;
	    _bcrec = _bcrec + (self.__factory__[i],)&lt;br /&gt;
	#print _odct,_bcrec&lt;br /&gt;
	return new.classobj(self.__classname__, _bcrec, _odct)&lt;br /&gt;
    def name(self):&lt;br /&gt;
	return self.__classname__&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Python]]&lt;/div&gt;</summary>
		<author><name>PeterHarding</name></author>
	</entry>
</feed>