Python で空のオブジェクトを定義するためのショートカットはありますか?それともカスタムの空のクラスのインスタンスを常に作成する必要がありますか?
編集:ダックタイピングに使用できる空のオブジェクトを意味します。
type を使用して、その場で新しいクラスを作成し、インスタンス化できます。そのようです:
>>> t = type('test', (object,), {})()
>>> t
<__main__.test at 0xb615930c>
タイプする引数は、クラス名、基本クラスのタプル、およびオブジェクトの辞書です。関数 (オブジェクトのメソッド) または属性を含めることができます。
実際に最初の行を次のように短縮できます
>>> t = type('test', (), {})()
>>> t.__class__.__bases__
(object,)
デフォルトでは、 type は object から継承する新しいスタイル クラスを作成するためです。
type
Python でメタプログラミングに使用されます。
ただし、オブジェクトのインスタンスを作成したいだけの場合。次に、そのインスタンスを作成します。lejlot が示唆するように。
このような新しいクラスのインスタンスを作成することには、役立つ可能性がある重要な違いがあります。
>>> a = object()
>>> a.whoops = 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'whoops'
一方:
>>> b = type('', (), {})()
>>> b.this_works = 'cool'
>>>
あなたは質問でそれを言いましたが、コードでそれを言及した答えがないので、これはおそらく最もクリーンな解決策の1つです:
class Myobject:
pass
x = Myobject()
x.test = "Hello, world!" # working
「空のオブジェクト」とはどういう意味ですか? クラスのインスタンスobject
? あなたは単に実行することができます
a = object()
それとも、null 参照への初期化を意味しますか? 次に、使用できます
a = None
使用できます
x = lambda: [p for p in x.__dict__.keys()]
それで
x.p1 = 2
x.p2 = "Another property"
後
x()
# gives
# ['p1', 'p2']
と
[(p, getattr(x,p)) for p in x()]
# gives
# [('p1', 2), ('p2', 'Another property')]