This is a multi-part message in MIME format. ------=_NextPart_000_0006_01C1D324.277B7410 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit I recently browsed through an unfinished book of Bruce Eckel, "Thinking in Python", Revision 0.1.2 I can't remember the URL where i got it, but i found it through searching for documentation on Python from the main site, www.python.org I found the following peace of code there: ------------------------------------------------------------------ #: c01:SingletonMetaClass.py class SingletonMetaClass(type): def __init__(cls, name, bases, dict): super(SingletonMetaClass, cls).__init__(name, bases, dict) original_new = cls.__new__ def my_new(cls, *args, **kwds): if cls.instance == None: cls.instance = original_new(cls, *args, **kwds) return cls.instance cls.instance = None cls.__new__ = staticmethod(my_new) class bar(object): __metaclass__ = SingletonMetaClass def __init__(self,val): self.val = val def __str__(self): return `self` + self.val ... #:~ ------------------------------------------------------------------ My question is about the "SingletonMetaClass" class. I have tried in the past to create my own types using Python and just could not find a way of doing that since built-in type objects' structure where not documented. The "SingletonMetaClass though", as far as i can understand, please help me with that, is doing exactly what i wanted: a new type definition. I browsed Python's manuals to find more about the attributes and functions that are used, but found nothing... Could anyone help me find information about the meaning and use of the following attributes/functions/objects? These are: --- the "__metaclass__" attribute of the "bar" class (derived from object) --- the "object" object itself --- the "super" function used in the "SingletonMetaClass" class (a class for a new type object?) --- the "__new__" attribute/method of a class (applies to any class?) --- the "staticmethod" function used in the "SingletonMetaClass" class --- any additional info about related classes or functions that are not used in the above example but exist and are available to use Thanx, Dimitris ------=_NextPart_000_0006_01C1D324.277B7410 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable <html xmlns:o=3D"urn:schemas-microsoft-com:office:office" = xmlns:w=3D"urn:schemas-microsoft-com:office:word" = xmlns=3D"http://www.w3.org/TR/REC-html40"> <head> <META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; = charset=3Dus-ascii"> <meta name=3DProgId content=3DWord.Document> <meta name=3DGenerator content=3D"Microsoft Word 10"> <meta name=3DOriginator content=3D"Microsoft Word 10"> <link rel=3DFile-List href=3D"cid:filelist.xml@01C1D280.D8EC0D80"> <!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:DoNotRelyOnCSS/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:DocumentKind>DocumentEmail</w:DocumentKind> <w:EnvelopeVis/> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--> <style> <!-- /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {mso-style-parent:""; margin:0cm; margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:12.0pt; font-family:"Times New Roman"; mso-fareast-font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline; text-underline:single;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline; text-underline:single;} span.EmailStyle17 {mso-style-type:personal-compose; mso-style-noshow:yes; mso-ansi-font-size:10.0pt; mso-bidi-font-size:10.0pt; font-family:Arial; mso-ascii-font-family:Arial; mso-hansi-font-family:Arial; mso-bidi-font-family:Arial; color:windowtext;} span.SpellE {mso-style-name:""; mso-spl-e:yes;} span.GramE {mso-style-name:""; mso-gram-e:yes;} @page Section1 {size:595.3pt 841.9pt; margin:72.0pt 90.0pt 72.0pt 90.0pt; mso-header-margin:35.4pt; mso-footer-margin:35.4pt; mso-paper-source:0;} div.Section1 {page:Section1;} --> </style> <!--[if gte mso 10]> <style> /* Style Definitions */=20 table.MsoNormalTable {mso-style-name:"Table Normal"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin:0cm; mso-para-margin-bottom:.0001pt; mso-pagination:widow-orphan; font-size:10.0pt; font-family:"Times New Roman";} </style> <![endif]--> </head> <body lang=3DEL link=3Dblue vlink=3Dpurple = style=3D'tab-interval:36.0pt'> <div class=3DSection1> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>I recently browsed = through an unfinished book of Bruce <span class=3DSpellE>Eckel</span>, = "Thinking in Python", Revision 0.1.2<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>I can't remember the = URL where <span class=3DSpellE>i</span> got it, but <span = class=3DSpellE>i</span> found it through searching for documentation on Python from the main site, www.python.org<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>I found the following = peace of code there:<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'>-------------------------------------------= -----------------------<o:p></o:p></span></font></p> <p class=3DMsoNormal style=3D'tab-stops:93.0pt'><font size=3D2 = face=3D"Courier New"><span lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language: EN-GB'><span = style=3D'mso-tab-count:1'>  = ; = </span><o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'>#: c01:SingletonMetaClass.py<o:p></o:p></span></font></p> <p class=3DMsoNormal><span class=3DGramE><font size=3D2 face=3D"Courier = New"><span lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language: EN-GB'>class</span></font></span><font size=3D2 face=3D"Courier = New"><span lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language: EN-GB'> <span = class=3DSpellE>SingletonMetaClass</span>(type):<o:p></o:p></span></font><= /p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> </span><span = class=3DGramE>def</span> __init__(<span class=3DSpellE>cls</span>, name, bases, <span = class=3DSpellE>dict</span>):<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> = </span><span class=3DGramE>super(</span><span class=3DSpellE>SingletonMetaClass</span>, <span = class=3DSpellE>cls</span>).__init__(name, bases, <span class=3DSpellE>dict</span>)<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> = </span><span class=3DSpellE>original_new</span> =3D <span class=3DSpellE>cls.__new</span>__<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><o:p> </o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> = </span><span class=3DGramE>def</span> <span class=3DSpellE>my_new</span>(<span class=3DSpellE>cls</span>, *<span = class=3DSpellE>args</span>, **<span class=3DSpellE>kwds</span>):<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> &nbs= p; </span><span class=3DGramE>if</span> <span class=3DSpellE>cls.instance</span> =3D=3D = None:<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> &nbs= p; </span><span = class=3DSpellE>cls.instance</span> =3D <span class=3DSpellE>original_<span = class=3DGramE>new</span></span><span class=3DGramE>(</span><span class=3DSpellE>cls</span>, *<span = class=3DSpellE>args</span>, **<span class=3DSpellE>kwds</span>)<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> &nbs= p; </span><span class=3DGramE>return</span> <span class=3DSpellE>cls.instance</span><o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><o:p> </o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> = </span><span class=3DSpellE>cls.instance</span> =3D <span class=3DGramE>None</span><o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> = </span><span class=3DSpellE>cls.__new</span>__ =3D <span class=3DSpellE><span class=3DGramE>staticmethod</span></span><span class=3DGramE>(</span><span = class=3DSpellE>my_new</span>)<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><o:p> </o:p></span></font></p> <p class=3DMsoNormal><span class=3DGramE><font size=3D2 face=3D"Courier = New"><span lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language: EN-GB'>class</span></font></span><font size=3D2 face=3D"Courier = New"><span lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language: EN-GB'> bar(object):<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> </span>__<span = class=3DSpellE>metaclass</span>__ =3D <span class=3DSpellE>SingletonMetaClass</span><o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><o:p> </o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> </span><span = class=3DGramE>def</span> __init__(<span class=3DSpellE>self,val</span>):<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> = </span><span class=3DSpellE>self.val</span> =3D <span class=3DSpellE><span = class=3DGramE>val</span></span><o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><o:p> </o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> </span><span = class=3DGramE>def</span> __<span class=3DSpellE>str</span>__(self):<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><span style=3D'mso-spacerun:yes'> = </span><span class=3DGramE>return</span> `self` + <span class=3DSpellE>self.val</span><o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><o:p> </o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'>...<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'>#:~<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'><o:p> </o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3D"Courier New"><span = lang=3DEN-GB style=3D'font-size:10.0pt;font-family:"Courier = New";mso-ansi-language:EN-GB'>-------------------------------------------= -----------------------<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>My question is about = the "<span class=3DSpellE>SingletonMetaClass</span>" = class.<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>I have tried in the = past to create my own types using Python and just could not find a way of doing = that since built-in type objects' structure where not = documented.<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>The "<span = class=3DSpellE>SingletonMetaClass</span> though", as far as <span class=3DSpellE>i</span> can understand, = please help me with that, is doing exactly what <span class=3DSpellE>i</span> = wanted: a new type definition. I browsed Python's manuals to find more about the = attributes and functions that are used, but found = nothing...<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>Could anyone help me = find information about the meaning and use of the following attributes/functions/objects? These are:<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>--- <span = class=3DGramE>the</span> "__<span class=3DSpellE>metaclass</span>__" attribute of the "bar" class (derived from object)<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>--- <span = class=3DGramE>the</span> "object" object itself<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>--- <span = class=3DGramE>the</span> "super" function used in the "<span = class=3DSpellE>SingletonMetaClass</span>" class (a class for a new type object?)<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>--- <span = class=3DGramE>the</span> "__new__" attribute/method of a class (applies to any = class?)<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>--- <span = class=3DGramE>the</span> "<span class=3DSpellE>staticmethod</span>" function used in = the "<span class=3DSpellE>SingletonMetaClass</span>" = class<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'>--- <span = class=3DGramE>any</span> additional info about related classes or functions that are not used in = the above example but exist and are available to = use<o:p></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-GB = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-GB'><o:p> </o:p></span= ></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span = style=3D'font-size:10.0pt; font-family:Arial'>Thanx, Dimitris</span></font><font size=3D2 = face=3DArial><span lang=3DEN-US = style=3D'font-size:10.0pt;font-family:Arial;mso-ansi-language:EN-US'><o:p= ></o:p></span></font></p> <p class=3DMsoNormal><font size=3D2 face=3DArial><span lang=3DEN-US = style=3D'font-size: 10.0pt;font-family:Arial;mso-ansi-language:EN-US'><o:p> </o:p></span= ></font></p> </div> </body> </html> ------=_NextPart_000_0006_01C1D324.277B7410--
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