5

「self」の説明に関するSOの投稿を読み、クラスに関するPythonのドキュメントを読みました。selfPythonクラスでの使用とその規則を理解していると思います。

selfただし、Pythonとそのイディオムは比較的新しいため、手続き型関数定義で使用される理由がわかりません。たとえば、整数型に関するPythonのドキュメントでは、関数の例は次のとおりです。

def bit_length(self):
    s = bin(self)       # binary representation:  bin(-37) --> '-0b100101'
    s = s.lstrip('-0b') # remove leading zeros and minus sign
    return len(s)       # len('100101') --> 6

で置き換えるselfことnumは、同じ機能結果です。すなわち:

def bit_length(num):
    s = bin(num)       # binary representation:  bin(-37) --> '-0b100101'
    s = s.lstrip('-0b') # remove leading zeros and minus sign
    return len(s)       # len('100101') --> 6

最初のケースで__init__なぜ使用されているのかをここで確認できるようなイディオムはありません。私は、手続き型関数の他selfの場所でもこの使用法を見てきましたが、混乱を招きます。self

だから私の質問:クラスやメソッドがない場合、なぜself説明的なパラメータ名ではなく関数定義で使用するのですか?

4

2 に答える 2

6

この例では、bit_lengthはintクラスの関数として定義されているため、実際には「クラスまたはメソッド」があります。アイデアは、整数にbit_lengthを与えるように「要求」することです。したがって、引数としてselfを取るように定義されています。

于 2010-11-22T21:09:00.777 に答える
4

本当の理由はありません。ただし、既存のクラスにモンキーパッチを適用する場合は、コードを読んでいる可能性のある人への通知として機能します。

于 2010-11-22T21:06:41.487 に答える