2

Pythonで構造をサポートする方法はありますか?通常のキーワードstructをサポートしていませんか?

例:

struct node
{
  unsigned dist[20];
  unsigned from[20];
}rt[10];

これをpython構造体に変換するにはどうすればよいですか?

4

4 に答える 4

3

属性の順序付けは (クラスを構築するために anOrderedDictまたは something が使用され__prepare__たり、別の方法で構築されたりしない限り) 必ずしも定義の順序ではないため、実際の C と互換性を持たせたい場合、structまたはデータが何らかの順序であることに依存する場合は、次のようになります。使用できるはずのベース ( を使用ctypes)。

from ctypes import Structure, c_uint

class MyStruct(Structure):
    _fields_ = [
        ('dist', c_uint * 20),
        ('from', c_uint * 20)
    ]
于 2013-04-22T16:21:23.577 に答える
1

@Abhishek-ヘルレ

私があなたの状況にあったとしたら、Python の Struct モジュールに頼るかもしれません。

同様に、あなたの場合、C構造は次のとおりです。

struct node
{
  unsigned dist[20];
  unsigned from[20];
}rt[10];

したがって、ここでの基本的な考え方は、C-Structure を python に、またはその逆に変換することです。上記の c-structure は、以下の Python コードで大まかに定義できます。

s = struct.Sturct('I:20 I:20') 

さて、この構造体に値をパックしたい場合は、以下のようなことができます。

dist = [1, 2, 3....20]
from = [1, 2, 3....20]
s.pack(*dist, *from)
print s #this would be binary representation of your C structure

もちろん、s.unpack メソッドを使用してアンパックすることもできます。

于 2015-08-28T06:59:16.597 に答える
1

空のクラスでも次のようになります。

In [1]: class Node: pass
In [2]: n = Node()
In [3]: n.foo = [1,2,4]
In [4]: n.bar = "go"
In [8]: print n.__dict__
{'foo': [1, 2, 4], 'bar': 'go'}
In [9]: print n.bar
go
于 2013-04-22T16:18:11.650 に答える