Latest posts on Структура с различными типами topichttps://python.su/forum/topic/522/2007-03-05T11:47:24+02:00Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T11:47:24+02:00pythonwin3679<strong>j2a</strong>, <strong>Daevaorn</strong>, спасибо
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T11:11:42+02:00Александр Кошелев3678<blockquote><em>bialix</em><br/>действительно, так лучше не писать.<br/>Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.<br/>И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace<br/>(например списки, наборы и словари).</blockquote>спасибо, я так и думал<br/><blockquote><em>pythonwin</em><br/>можно пример?</blockquote>я немного изменю пример<strong>j2a</strong>'а:<br/><div class="code"><pre><span class="o">>>></span> <span class="k">class</span> <span class="nc">Foo</span><span class="p">:</span>
<span class="o">...</span> <span class="n">bar</span> <span class="o">=</span> <span class="p">[</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span> <span class="p">]</span>
<span class="o">...</span>
<span class="o">>>></span> <span class="n">foo</span> <span class="o">=</span> <span class="n">Foo</span><span class="p">()</span>
<span class="o">>>></span> <span class="n">foo</span><span class="o">.</span><span class="n">bar</span><span class="o">.</span><span class="n">append</span><span class="p">(</span> <span class="mi">3</span> <span class="p">)</span>
<span class="o">>>></span> <span class="n">Foo</span><span class="o">.</span><span class="n">bar</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="o">>>></span> <span class="n">foo2</span> <span class="o">=</span> <span class="n">Foo</span><span class="p">()</span>
<span class="o">>>></span> <span class="n">foo2</span><span class="o">.</span><span class="n">bar</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
</pre></div>
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T10:56:36+02:00j2a3676<blockquote><em>pythonwin</em><br/><blockquote><em>bialix</em><br/>действительно, так лучше не писать.<br/>Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.<br/>И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace<br/>(например списки, наборы и словари).</blockquote>можно пример?</blockquote>>>> class Foo(object):<br/>… immutable = ('one', ‘two’)<br/>… mutable = <br/>…<br/>>>> bar = Foo()<br/>>>> buz = Foo()<br/>>>> bar.mutable.append('three')<br/>>>> buz.mutable<br/><br/>
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T10:46:44+02:00masai3674Лучше всего использовать словарь. Он наиболее близок к традтиционным структурам, к тому же является встроенным типом, что, имхо, должно положительно сказаться на скорости по сравнению с реализацией через класс. Да и объявлений никаких делать не нужно будет.
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T10:17:49+02:00pythonwin3672<blockquote><em>Daevaorn</em><br/>? Т.е. зачем так писать, если потом в __init__ всё инициализиуется и так?</blockquote>я сначало написал пример где были только параметры в init , потом прикинул что тому кто пишет на паскале проще для понимания код второго класса<br/><blockquote><em>bialix</em><br/>действительно, так лучше не писать.<br/>Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.<br/>И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace<br/>(например списки, наборы и словари).</blockquote>можно пример?
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T10:02:33+02:00bialix3670<blockquote><em>lorien</em><br/><blockquote>4.3 struct – Interpret strings as packed binary data<br/><br/>This module performs conversions between Python values and C structs represented as Python strings. It uses format strings (explained below) as compact descriptions of the lay-out of the C structs and the intended conversion to/from Python values. This can be used in handling binary data stored in files or from network connections, among other sources.</blockquote></blockquote>Этот модуль удобен для упаковки/распаковки данных при сериализации или обмене с си-кодом.<br/>Но не удобен для постоянной работы.
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T09:58:07+02:00bialix3669<blockquote><em>Daevaorn</em><br/>Немного не по теме, но я спрошу. Разве вот это нужно:<br/><blockquote><em>pythonwin</em><br/>class MyType:<br/> DateTime = datetime.datetime.now()<br/> Data = 0.0<br/> All = 0<br/> S = ''</blockquote>? Т.е. зачем так писать, если потом в __init__ всё инициализиуется и так?</blockquote>действительно, так лучше не писать.<br/>Объявление атрибутов на уровне класса автоматически делает их общими для всех экземпляров такого класса.<br/>И потом можно легко наступить на грабли, если какие-то переменные позволяют модифицировать их значения inplace<br/>(например списки, наборы и словари).
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T09:48:46+02:00Александр Кошелев3668Немного не по теме, но я спрошу. Разве вот это нужно:<br/><blockquote><em>pythonwin</em><br/>class MyType:<br/> DateTime = datetime.datetime.now()<br/> Data = 0.0<br/> All = 0<br/> S = ''</blockquote>? Т.е. зачем так писать, если потом в __init__ всё инициализиуется и так?
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T06:52:05+02:00pythonwin3663либо через класс<br/><div class="code"><pre><span class="kn">import</span> <span class="nn">datetime</span>
<span class="k">class</span> <span class="nc">MyType</span><span class="p">:</span>
<span class="n">DateTime</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span>
<span class="n">Data</span> <span class="o">=</span> <span class="mf">0.0</span>
<span class="n">All</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">S</span> <span class="o">=</span> <span class="s">''</span>
<span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">DateTime</span><span class="p">,</span> <span class="n">Data</span><span class="p">,</span> <span class="n">All</span><span class="p">,</span> <span class="n">S</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">DateTime</span> <span class="o">=</span> <span class="n">DateTime</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Data</span> <span class="o">=</span> <span class="n">Data</span>
<span class="bp">self</span><span class="o">.</span><span class="n">All</span> <span class="o">=</span> <span class="n">All</span>
<span class="bp">self</span><span class="o">.</span><span class="n">S</span> <span class="o">=</span> <span class="n">S</span><span class="p">[:</span><span class="mi">5</span><span class="p">]</span>
<span class="n">myt1</span><span class="o">=</span> <span class="n">MyType</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="mf">15.6</span><span class="p">,</span> <span class="mi">178</span><span class="p">,</span> <span class="s">'1234567890'</span><span class="p">)</span>
</pre></div><br/>или через словари<br/><div class="code"><pre><span class="kn">import</span> <span class="nn">datetime</span>
<span class="n">d</span><span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">DateTime</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="n">Data</span> <span class="o">=</span> <span class="mf">15.6</span><span class="p">,</span> <span class="n">All</span> <span class="o">=</span> <span class="mi">178</span><span class="p">,</span> <span class="n">S</span> <span class="o">=</span> <span class="s">'1234567890'</span><span class="p">)</span>
<span class="k">print</span> <span class="n">d</span>
</pre></div>
Общий :: Python для экспертов :: Структура с различными типами
2007-03-05T06:25:24+02:00Imnotgoga3662Как в Python получить подобную структуру:<br/>MyType = packed record<br/> Date: TDateTime;<br/> Time: TTime;<br/> Data: Double;<br/> All: Byte;<br/> S: String;<br/>end;