67435


class_a.pyに基底クラスclass_common()を作り、派生クラスclass_aを同じclass_a.pyに記述、もう一方の派生クラスclass_bをclass.pyに記述しています。  
それぞれ機能単位で派生クラスのファイルを分けています。  
機能ごとにテストするため、個別ファイルで実行したいと考えています。

class_a.pyの実行時には問題がありません。  
class_b.pyの実行時にはAttributeErrorとなり、class_bの基底クラスclass_aにclass_commonがないというエラーになります。

この場合、どう記述すればよいのでしょうか？  
ご教示をお願いします。

以下にコードを示します。

[code]

    # class_a.py
    import class_b
    
    class class_common():
        def __init__(self):
            self.cc = 100
            return
    
    class class_a(class_common):
        def __init__(self):
            super().__init__()
            self.A = 10
    
        def a(self,b):
            B = class_b.class_b()
            a = 1
            return self.cc-B.B+b+a
    
    if __name__ == "__main__":
        c = class_a()
        print(c.a(30))
    
[/code]

[code]

    #class_b.py
    import class_a
    
    class class_b(class_a.class_common):
        def __init__(self):
            super().__init__()
            self.B=20
            return
    
        def b(self,a):
            A = class_a.class_a()
            b = -1
            return self.cc-b-a+A.A
    
    
    if __name__ == "__main__":
        c = class_b()
        print(c.b(30))
    
[/code]


CC BY-SA 4.0
2020-06-09T01:17:07.203
67431
2020-06-09T02:59:50.497
2020-06-09T01:38:21.910
3060
32891
question
python python3
importの方法


基底クラスを個別ファイルにすることで解決しました。

[code]

    # class_common.py
    class class_common():
        def __init__(self):
            self.cc = 100
            return
    if __name__ == "__main__":
        c = class_a()
        print(c.a(30))
    
[/code]

[code]

    # class_a.py
    import class_common as COM
    import class_b
    
    class class_a(COM.class_common):
        def __init__(self):
            super().__init__()
            self.A = 10
    
        def a(self,b):
            B = class_b.class_b()
            a = 1
            return self.cc-B.B+b+a
    
    if __name__ == "__main__":
        c = class_a()
        print(c.a(30))
    
[/code]

[code]

    #class_b.py
    import class_common as COM
    import class_a
    
    class class_b(COM.class_common):
        def __init__(self):
            super().__init__()
            self.B=20
            return
    
        def b(self,a):
            A = class_a.class_a()
            b = -1
            return self.cc-b-a+A.A
    
    
    if __name__ == "__main__":
        c = class_b()
        print(c.b(30))
    
[/code]


CC BY-SA 4.0
2020-06-09T02:59:50.497
67435
2020-06-09T02:59:50.497
32891
67431
answer