0

ctypes を使用して、次のクラスを定義しました。

class ListOfVariables(Structure):
   _fields_ = [
                ("name0", c_int),
                ("name1", c_int),
                ("name2", c_int)              
]                  

実行時にメンバー ' fields ' に 1 つの要素を追加することは可能ですか? たとえば、次のように新しい変数を定義できます。

cstructA = ListOfVariables(1,2,3,4)

または別のタイプでも:

cstructB = ListOfVariables(1,2,3,'b')

クラスを動的に変更した後、コンストラクターが新しい数の引数で呼び出されることが必要です。

4

1 に答える 1

1

構造体は C 構造体であると想定されているため、これを行うことはできません。つまり、要素の固定オフセットを持つバイト単位の固定サイズです。C 構造体のレイアウトを動的に変更することはできません。たとえば、すでに作成されているインスタンスの場合はどうなりますか?

通常の Python オブジェクトのレイアウトを動的に変更することができます。これは、正確には、内部での実装が単純な C 構造よりも複雑であるためです。

必要に応じて、ListOfVariables のサブクラスを作成できます。

class ListOfVariables2(ListOfVariables):
    _fields_ = [('extra', c_int)]

これは、古い構造の拡張である別の C 構造を定義していることを意味します。

于 2012-12-20T21:41:55.373 に答える