6

私が読んだ/理解していることから、「self」パラメーターは「this」に似ています。

本当?

オプションの場合、self がメソッドに渡されなかったらどうしますか?

4

6 に答える 6

5

はい、似たような使い方です。これは位置パラメータであり、必要に応じて呼び出すことができることに注意してください。ただし、それを呼び出すための強力な規則がありますself(notthisまたは何か他のもの)。使用可能なインスタンス メソッドには、位置パラメータが必要です。オプションではありません。

于 2010-07-19T17:01:20.373 に答える
3

パイソンの喜び

それはある意味で真実です。メソッドは、その一部であるオブジェクト インスタンスにバインドされます。あなたが見るとき

def some_func(self, foo, bar)

たとえば、次のように、呼び出し時に self の受け渡しが暗黙的に行われることがあります。

obj.some_func(foo_val, bar_val)

どちらが等しいか (objクラス であると仮定MyClass)

MyClass.some_func(obj, foo_val, bar_val)

メソッドは にバインドされているためobjself引数が取り込まれます。これは、Python が意味することを明示することの一部です。他の言語では、thisスコープに飛び込むだけですが、Python では、これがどのように発生するかが明らかになります。

selfメソッドを渡したり、バインドされたコンテキストから呼び出していないときに手動で渡すこともできます。

Python docs は良い仕事をします:

xf = x.f
while True:
   print xf()

時間の終わりまで hello world を出力し続けます。

メソッドが呼び出されると、正確には何が起こりますか? f() の関数定義で引数が指定されていても、上記の引数なしで xf() が呼び出されたことに気付いたかもしれません。口論はどうした?確かに、引数を必要とする関数が引数なしで呼び出されると、Python は例外を発生させます — 引数が実際に使用されていなくても...

実際、あなたは答えを推測したかもしれません: メソッドの特別な点は、オブジェクトが関数の最初の引数として渡されることです。この例では、呼び出し xf() は MyClass.f(x) とまったく同じです。一般に、n 個の引数のリストを使用してメソッドを呼び出すことは、最初の引数の前にメソッドのオブジェクトを挿入することによって作成される引数リストを使用して対応する関数を呼び出すことと同じです。

于 2010-07-19T17:02:45.643 に答える
2

selfis ですthis。明示的に渡し、明示的に使用してクラスのメソッド/プロパティを参照するだけです。

クラスメソッドではオプションではありません。TypeError少なくとも 1 つの引数 (つまり、selfパラメーター)なしでクラスメソッドを定義しようとすると、が返されます。

ただし、 以外の呼び方もできますが、それ以外selfは見たことがありません。

于 2010-07-19T17:02:32.773 に答える
0

selfは間違いなく似ていますがthis、Pythonでは、名前selfは単なる慣例であり、他の名前を付けることができます。変数の名前は、関数のプロトタイプ()で呼び出したものにちなんで付けられますdef function(whatever, params...):

たとえば、メソッドはself実際に必要です。クラスメソッドまたは静的メソッドの場合、それらをそのように扱う必要があることを指定する必要があります。そうすれば、self必須ではありません。例えば:

def type_to_display(type):
    """Converts a pass type to the full written pass type."""
    return list((pair[1] for pair in Pass.TYPE_CHOICES if pair[0] ==      
                          type[0:1].upper()))[0]                          
type_to_display = staticmethod(type_to_display)      

自己が渡されないような方法でインスタンスメソッドを使用することはできません。たとえば、クラスのインスタンスmy_carがあり、クラスのインスタンスメソッドCarを使用する場合、インスタンスは暗黙的にメソッドに渡されます。最初のパラメータとして()。Cardrivemy_cardriveself

class Car:
    def drive(self):
        self.do_some_stuff()

my_car = Car()
my_car.drive() # actually calls Car.drive(my_car)
于 2010-07-19T17:08:47.977 に答える
0

クラスでは、self変数 (またはクラスclsメソッドの場合) が必要です。あなたがそれを何と呼びたいかはあなたの決定です。必要に応じて、代わりに呼び出すことができますthis

Aは、インスタンスの代わりに最初の引数としてclassmethodを取得するメソッドです。classインスタンスを渡さずに呼び出すことができます。つまり、次のclassmethodことができます。

SomeObject.some_class_method()

通常の方法では、あなたがする必要があります

SomeObject().some_normal_method()
or
SomeObject.some_normal_method(instance)
于 2010-07-19T17:01:09.860 に答える
0

selfthisC++と同様に、メソッドが呼び出されたオブジェクトを参照します。しかし、それselfは単なる慣例であることが重要です。好きなように名前を付けて、サブクラスのインスタンスを渡すことができます。

于 2010-07-19T17:02:36.580 に答える