0

別のファイルでインスタンス化された親クラスからサブクラス変数にアクセスする方法を探しています。例えば

ベースファイル.py:

class A(object): #gets subclassed
    var = 0 #place holder

    def printTheVar(self):
        print self.var


class B(object):
    def buildAndCallA(self):
        a = A()
        a.printTheVar()

実装ファイル.py:

from basefile import *

class A(A):
    var = 10

if __name__ == '__main__':
    b = B()
    b.buildAndCallA()

私が実行すると:

$ python implementationfile.py

私は 0 を取得します。私は 10 を取得したいです。

親クラスと実装クラスの両方が同じファイルにある場合、これは明らかに問題ではありませんが、それらが必要ないプロジェクト構造があります。

somedir/
| basefile.py
| implementations/
| -- implementationA.py
| -- implementationB.py
| -- implementationC.py

モジュールが役立つかもしれないと思いますabcが、それを使った私の実験はこれまでのところ無益であることが証明されています.

4

2 に答える 2

0

@ジェームズの答えは、私にほとんどの方法を教えてくれました。明確にするために、3 つのファイルを使用してそれを行うよりグローバルな方法を次に示します (これは実際にプロジェクトがどのように構成されているかです)。

script.py:

if __name__ == '__main__':
    if sys.argv[0] == 'useImplementation1'
        import implementations.implementation1 as implementation
    elif sys.argv[1] == 'useImplementation2':
        import implementations.implementation2 as implementation

    b = implementation.B(cls=implementation)
    b.buildAndCallA()

basefile.py (A = cls.Aこれがキーであることに注意してください):

class A(object):
    var = 0 #place holder

    def printTheVar(self):
        print self.var


class B(object):
    def __init__(self,cls):
        global A
        A = cls.A

    def buildAndCallA(self):
        a = A()
        a.printTheVar()

implementation1.py:

from basefile import *

class A(A):
    var = 10
于 2013-05-29T20:26:23.557 に答える