<div dir="ltr">I'm not sure if this list is a suitable place to ask for this kind of help so if it's not please just suggest another forum which might be more suitable.<div><br></div><div><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
I'm looking for help/suggestions how to architect a module (perhaps just a class).</p><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
There is an existing module I want to use which has a class we'll call <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">Existing Class</strong>.</p><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
I want to create a python module which allows me to create <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">new_objects</strong> with the following properties:</p><ul style="margin:0px 0px 1em 30px;padding:0px;border:0px;font-size:14px;vertical-align:baseline;list-style-position:initial;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
<li style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">The new_objects have all the attributes of the Existing_Class (simply create a class that inherits from Existing_Class)</li>
<li style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">I then want to create a nested structure under the new_objects something like:</li></ul><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
<code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">new_object.foo</code></p>
<p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
<code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">new_object.foo.bar</code></p>
<p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
<code style="margin:0px;padding:1px 5px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">new_object.foo.bar.baz</code></p>
<p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
Where foo, bar, baz have the following properties:</p><ul style="margin:0px 0px 1em 30px;padding:0px;border:0px;font-size:14px;vertical-align:baseline;list-style-position:initial;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
<li style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">All have <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">docstrings</strong></li>
<li style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">All are available for <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">tab completion</strong> tools upon new_object creation.</li>
<li style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"><p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both">Some of which will have <strong style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">new methods</strong> which act in the following way:</p>
<ul style="margin:0px 0px 0px 30px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;list-style:disc"><li style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">new_object.foo.bar()</code></li>
</ul><p style="margin:0px 0px 1em;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;clear:both">calls</p><ul style="margin:0px 0px 0px 30px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;list-style:disc">
<li style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"><code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif">new_object.existing_method("foo.bar", *args)</code></li>
</ul></li></ul><p style="margin:0px 0px 1em;padding:0px;border:0px;font-size:14px;vertical-align:baseline;clear:both;color:rgb(0,0,0);font-family:Arial,'Liberation Sans','DejaVu Sans',sans-serif;line-height:17.804800033569336px">
I believe I'll need to use metaclasses and have an idea that types.MethodType will help but I keep getting stuck. Any pointers would be greatly appreciated.</p></div></div>