タグ付けされた質問 「class-method」


9
Ruby:インスタンスからクラスメソッドを呼び出す
Rubyでは、そのクラスのインスタンスの1つからクラスメソッドをどのように呼び出しますか?私が持っていると言います class Truck def self.default_make # Class method. "mac" end def initialize # Instance method. Truck.default_make # gets the default via the class's method. # But: I wish to avoid mentioning Truck. Seems I'm repeating myself. end end この行Truck.default_makeはデフォルトを取得します。しかし、言及せずにこれを言う方法はありTruckますか?あるべきようです。
347 ruby  class-method 

16
クラスメソッドの目的は何ですか?
私は自分にPythonを教えていますが、最近のレッスンでは、PythonはJavaではないということでした。そのため、すべてのClassメソッドを関数に変換するのにしばらく時間がかかりました。 staticJava でメソッドを使用する場合にClassメソッドを使用する必要がないことに気付きましたが、今はいつ使用するのかわかりません。Pythonクラスのメソッドについて私が見つけることができるすべてのアドバイスは、私がそれらを避けるべきであるような初心者のラインに沿っており、標準のドキュメントはそれらを議論するときに最も不透明です。 誰かがPythonでClassメソッドを使用する良い例を持っていますか、少なくとも誰かがClassメソッドが賢明に使用できるときを教えてもらえますか?

10
関数ポインターを介したC ++クラスメソッドの呼び出し
クラスメンバー関数の関数ポインターを取得し、後でそのメンバー関数を特定のオブジェクトで呼び出すにはどうすればよいですか?私は書きたいです: class Dog : Animal { Dog (); void bark (); } … Dog* pDog = new Dog (); BarkFunction pBark = &Dog::bark; (*pBark) (pDog); … また、可能であれば、ポインタを介してコンストラクタも呼び出したいです。 NewAnimalFunction pNew = &Dog::Dog; Animal* pAnimal = (*pNew)(); これは可能ですか?可能であれば、これを行うための好ましい方法は何ですか?


3
Pythonで基本クラスのclassmethodを呼び出す
次のコードを検討してください。 class Base(object): @classmethod def do(cls, a): print cls, a class Derived(Base): @classmethod def do(cls, a): print 'In derived!' # Base.do(cls, a) -- can't pass `cls` Base.do(a) if __name__ == '__main__': d = Derived() d.do('hello') > $ python play.py > In derived! > <class '__main__.Base'> msg からDerived.do、どのように電話しBase.doますか? superこれが通常のオブジェクトメソッドであれば、通常は直接、または基本クラス名を直接使用しますが、どうやら基本クラスでclassmethodを呼び出す方法が見つかりません。 上記の例では、Base.do(a)印刷Baseの代わりにクラスをDerivedクラス。

3
いつ@classmethodを使用する必要があり、いつdef method(self)を使用する必要がありますか?
これまで使用したことのないDjangoアプリを統合しているときに、クラスで関数を定義するために使用される2つの異なる方法を見つけました。作者は両方とも非常に意図的に使用しているようです。最初のものは私自身がよく使うものです: class Dummy(object): def some_function(self,*args,**kwargs): do something here self is the class instance もう1つは、私が使用しないものです。これは主に、いつ使用するのか、何のために使用するのかがわからないためです。 class Dummy(object): @classmethod def some_function(cls,*args,**kwargs): do something here cls refers to what? Pythonのドキュメントでは、classmethodデコレータは次の文で説明されています。 クラスメソッドは、インスタンスメソッドがインスタンスを受け取るのと同じように、暗黙の最初の引数としてクラスを受け取ります。 したがって、私clsはDummyそれ自体を参照していると思います(classインスタンスではなく、)。私はいつでもこれを行うことができたので、なぜこれが存在するのか正確には理解していません: type(self).do_something_with_the_class これは明確にするためだけですか、それとも私は最も重要な部分を見逃しましたか?それなしでは実行できない不気味で魅力的なことですか?

5
クラスメソッドでsuperを使用する
Pythonでsuper()関数を学習しようとしています。 この例(2.6)に出くわして行き詰まるまで、私はそれを理解していると思いました。 http://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html#super-with-classmethod-example Traceback (most recent call last): File "<stdin>", line 1, in <module> File "test.py", line 9, in do_something do_something = classmethod(do_something) TypeError: unbound method do_something() must be called with B instance as first argument (got nothing instead) >>> 例の直前にこの行を読んだとき、それは私が期待したものではありませんでした: クラスメソッドを使用している場合、superを呼び出すインスタンスはありません。私たちにとって幸いなことに、superは2番目の引数として型を使用しても機能します。---以下に示すように、型を直接superに渡すことができます。 これは、do_something()をBのインスタンスで呼び出す必要があると言っても、Pythonが私に言っていることではありません。

4
`classmethod`とメタクラスメソッドの違いは何ですか?
Pythonでは、@classmethodデコレータを使用してクラスメソッドを作成できます。 >>> class C: ... @classmethod ... def f(cls): ... print(f'f called with cls={cls}') ... >>> C.f() f called with cls=<class '__main__.C'> あるいは、メタクラスで通常の(インスタンス)メソッドを使用できます。 >>> class M(type): ... def f(cls): ... print(f'f called with cls={cls}') ... >>> class C(metaclass=M): ... pass ... >>> C.f() f called with cls=<class '__main__.C'> の出力に示されているようにC.f()、これら2つのアプローチは同様の機能を提供します。 @classmethodメタクラスでの通常のメソッドの使用と使用の違いは何ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.