短い答えはノーです。これはできませんし、したくないはずです。
あなたの通常の Python オブジェクト サンプルは、あなたが思っていることをしません。インスタンス属性を自動的に初期化するわけではありません。代わりにクラス属性を作成しています。
場合によっては同じように機能しますが、同じものではありません。たとえば、次のように比較します。
>>> class Foo(object):
... bar=[]
... def __init__(self):
... self.baz=[]
...
>>> f1 = Foo()
>>> f2 = Foo()
>>> f1.bar.append(100)
>>> f1.baz.append(100)
>>> f2.bar
[100]
>>> f2.baz
[]
ここで、f1
とf2
それぞれが独自の を初期化しますが、独自の を自動的に初期化するわけではありませんbaz
— それらは他のすべてのインスタンスと 1つの を共有します。bar
bar
そして、このケースにより直接的に関連する:
>>> f1.__dict__
{'baz': [1]}
bar
クラス属性は の辞書の一部ではありませんf1
。
したがって、同じことを に変換するとctypes
、"signature"
それをクラス属性にすると、構造体のメンバーにはなりません。つまり、各インスタンスの一部としてメモリに配置されません。それはそれを持っているという全体の目的を無効にするでしょう.
C++ を知っている場合は、C++ の用語で調べると役立つ場合があります。
上記のようなクラス属性はbar
、C++ の静的メンバー変数のようなものですが、インスタンス属性は通常のインスタンス メンバー変数のようなものです。
この C++ コードでは:
struct bar {
static const long signature = 0x896489648964;
};
…それぞれbar
が実際には空の構造です。bar::signature
メモリ内の別の場所に保存されている単一のものがあります。インスタンスを介して参照できますbar
が、コンパイラb1.signature
がbar::signature
.
* 私が「ある程度」と言った理由は、Python クラスの属性はサブクラスによってオーバーライドできますが、C++ の静的メンバーはオーバーライドできないためです。これらは実際には単なるグローバル変数であり、サブクラスによってのみ「隠す」ことができます。