8

object()組み込み関数を何に使用するかを理解しようとしています。引数を取らず、すべての Python クラスに共通の型の「機能のないオブジェクト」を返し、すべての Python クラスに共通のすべてのメソッドを持ちます。

ジャック・スケリントンを引用すると、何. は。これ?

4

2 に答える 2

12

プログラミングする必要がない場合でもobject、目的を果たします。それは、他のすべてのオブジェクトが派生する共通のクラスです。mro(メソッド解決順序) メソッドによってリストされる最後のクラスです。この概念には名前とオブジェクトが必要であり、objectこの目的を果たします。

のもう 1 つの用途は、センチネルobjectの作成です。

sentinel = object()

これは、マルチスレッド プログラミング (キューを介して渡される) で、終了イベントを通知するためによく使用されます。Noneキューハンドラーはこれらの値を処理する引数として解釈する必要がある場合があるため、送信またはその他の値を使用したくない場合があります。プログラムの他の部分が生成できない独自の値が必要です。

この方法でセンチネルを作成すると、通常のキュー値ではないことが確実な一意のオブジェクトが提供されるため、テストして特別なイベントのシグナルとして使用できます。クラス、クラス インスタンス、または関数を作成するなど、他の可能性もありますが、それらの代替手段はすべて、より大きく、より多くのリソースを使用し、.NET ほど簡潔ではありませんobject()

于 2013-09-22T01:31:20.080 に答える
4

ドット (特に ) をオーバーライドする場合に最も役立ちます__setattr__。これにより、再帰を中断できます。例えば:

class SomeClass(object):
    def __setattr__(self, name, value):
        if name not in ('attr1', 'attr2', 'attr3', 'attr4'):
            object.__setattr__(self, name, value)
        else:
            do_something_else()
于 2013-09-22T01:43:08.763 に答える