2017-05-30 1 views
1

子クラスから静的関数にアクセスする方法を教えてください。Python3:子クラスから静的関数にアクセス

class Parent: 
    bar = [] 

    @classmethod 
    def foo(cls): 
    print(' | '.join(cls.bar)) 

class Child_A(Parent): 
    bar = ['abs', 'arq', 'agf'] 
    foo() # ERROR: NameError: name 'foo' is not defined 
### abs | arq | agf 

class Child_B(Parent): 
    bar = ['baz', 'bux', 'bet'] 
    foo() # ERROR: NameError: name 'foo' is not defined 

### baz | bux | bet 

class Child_C(Parent): 
    bar = ['cat', 'cqy', 'cos'] 
    foo() # ERROR: NameError: name 'foo' is not defined 

### cat | cqy | cos 

子供たちそれぞれがbarリストの独自のセットを持っていると私は彼らが正しい文字列をプリントアウトするために、親クラスからfoo()機能を使用します。クラスメソッドがある方法である

class Parent: 
    bar = [] 
    @classmethod 
    def foo(cls): 
     print(' | '.join(cls.bar)) 

class Child(Parent): 
    bar = ['baz', 'qux', 'far'] 
    Child.foo() # This will make cls Child class and access child's bar element 
### baz | qux | far 
+1

あなたにはクラスメソッドがあります。インスタンス化せずに親オブジェクトを使用するだけです。 'Parent.foo()' – Kasramvd

+0

'Parent.foo()'は 'Child.bar'ではなく' Parent.bar'を返します。 – MakPo

+1

それがあなたの質問に完全に説明したいなら、それを完全に説明してください。 – Kasramvd

答えて

1
class Parent: 
    bar = [] 
    @classmethod 
    def foo(cls): 
     print(' | '.join(cls.bar)) 

class Child(Parent): 
    bar = ['baz', 'qux', 'far'] 
Child.foo() 

1

クラスメソッドは、あなたの子供クラスのfooメソッドでそう

が継承されたクラス名を使用してアクセスされますが、クラス名とそれを呼び出す必要がありますオブジェクトではなくクラスにバインドされています。クラスインスタンスの作成は不要です。 Classmethodは常に、子クラスではない同じクラスのインスタンスを返します。実際にクラスメソッドはOOPのルールを破ります。

+0

私はそれを試みた。 'NameError:name 'Child'が定義されていません。 – MakPo

関連する問題