2016-04-28 5 views
0

私はかなり類似している親クラスの一般的なメソッドをグループ化したいという2つの 'Child'クラスを作成しています。私の問題は、スーパークラスから子クラスの静的変数にアクセスしようとするときに発生します。私が試したNameError: name 'var' is not definedPythonでスーパークラスから静的変数にアクセスする

class Parent: 
    @staticmethod 
    def do_something_with_var(): 
     print(var) 

class Child(Parent): 
    var = "Hello world" 

Child.do_something_with_var() 

次のものがParentvarを宣言することは明らかだったが、同じエラーが解消されない:

次のコードは、エラーがスローされます。

Iが見出さ
class Parent: 
    var = "" 

    @staticmethod 
    def do_something_with_var(): 
     print(var) 

class Child(Parent): 
    var = "Hello world" 

Child.do_something_with_var() 

溶液は、送信者クラスを受信することであったが、その後の呼び出しは、ビット醜いなる:方法の

class Parent: 
    @staticmethod 
    def do_something_with_var(cls): 
     print(cls.var) 

class Child(Parent): 
    var = "Hello world" 

Child.do_something_with_var(Child) 

答えて

2

静的メソッドの使用(3回目の試み)、クラス変数へのアクセス(2回目の試み)には混乱します。 (Pythonの2.7)の下で示したように、あなたが何をしたいのか

は、classmethodsです:

class Parent(object): 
    @classmethod 
    def do_something_with_var(cls): 
     print cls.var 

class ChildA(Parent): 
    var = "Child A" 

ChildA.do_something_with_var() # prints Child A 

この例では、あなたの3回目の試みに相当します。

+0

ああ、私は実際にあなたのソリューションを試しましたが、私は引き続きChildを引数として提供していました...今はすべてクリアです! –

1

静的スコープは、それは次のようにクラススコープに結合されることを意味名前空間、クラスへの参照なし。

@classmethodが必要なので、クラスへの参照を取得できます。

関連する問題