2

私はC++とJavaを知っており、Pythonプログラミングに慣れていません。だから多分それは私がやろうとしていることは悪いスタイルです。

休閑の例を考えてみましょう。

class foo:
        def a():
                __class__.b() # gives: this is foo
                bar.b() # gives: this is bar
                foo.b() # gives: this is foo
                # b() I'd like to get "this is bar" automatically

        def b():
                print("this is foo")

class bar( foo ):
        def b( ):
                print("this is bar")

bar.a()

selfタスクの必要がないため、クラスのインスタンスを作成しようとしていないため、パラメーターを使用していないことに注意してください。関数をオーバーライドできるように関数を参照しようとしています。

4

2 に答える 2

5

あなたが望むのはa、クラスメソッドになることです。

class Foo(object):
    @classmethod
    def a(cls):
        Foo.b() # gives: this is foo
        Bar.b() # gives: this is bar
        cls.b() # gives: this is bar
    @staticmethod
    def b():
        print("this is foo")

class Bar(Foo):
    @staticmethod
    def b():
        print("this is bar")

Bar.a()

Pythonのコーディングスタイルに合わせてスタイルを編集しました。インデントとして4つのスペースを使用します。括弧の間に余分なスペースを入れないでください。キャメルケースのクラス名を大文字にします。

Astaticmethodは、引数を取らず、クラスの属性に作用しないクラスのメソッドです。Aclassmethodは、クラスを属性として自動的に取得するクラスのメソッドです。

継承の使用は問題ありませんでした。

于 2011-08-09T09:45:42.847 に答える
0

実行モデルからの引用:

クラスブロックで定義されている名前の範囲は、クラスブロックに限定されています。メソッドのコードブロックには拡張されません。関数スコープを使用して実装されるため、ジェネレーター式が含まれます。

bこれは、関数のスコープに名前がないことを意味しますa。クラスまたはインスタンスオブジェクトを介して参照する必要があります。

于 2011-08-09T09:46:27.680 に答える