1. ホーム
  2. python

[解決済み] Pythonで空のオブジェクトを作成する

2022-02-10 04:57:37

質問

Pythonで空のオブジェクトを定義するためのショートカットはありますか、それとも常にカスタム空のクラスのインスタンスを作成する必要がありますか?

編集部:ダックタイピングに使えるエンプティオブジェクトという意味です。

どのように解決するのですか?

typeを使って、その場で新しいクラスを作成し、インスタンス化することができます。こんな風にね。

>>> t = type('test', (object,), {})()
>>> t
<__main__.test at 0xb615930c>

typeの引数は以下の通りです。クラス名、ベースクラスのタプル、およびオブジェクトの辞書です。辞書には関数(オブジェクトのメソッド)または属性を含めることができます。

最初の行は、実際には次のように短縮できます。

>>> 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'
>>>