2017-12-13 14 views
0

Pythonのバージョンをとして、ネストされた/インナークラスを使用するにはPythonのimportクラスが別のクラスに

class Backup: 
    class Create: 
     @staticmethod 
     def all(): 
      print('create all') 

     @staticmethod 
     def user(username): 
      print('create user: ' + username) 

     @staticmethod 
     def file(filename): 
      print('create file: ' + filename) 

    class Restore: 
     @staticmethod 
     def all(): 
      print('restore all') 

     @staticmethod 
     def user(username): 
      print('restore user: ' + username) 

     @staticmethod 
     def file(filename): 
      print('restore file: ' + filename) 

    class Delete: 
     @staticmethod 
     def all(): 
      print('delete all') 

     @staticmethod 
     def user(username): 
      print('delete user: ' + username) 

     @staticmethod 
     def file(filename): 
      print('delete file: ' + filename) 

をしかし、私は自分のモジュールにネストされたクラスを移動したいですそれらをインポートするが、私はそれを行う方法がわからない。ここでいくつかの同様のスタックオーバーフローの質問に基づいて私の最新の試みだった。もちろん、それは動作しませんでした:

from Models.Create import Create 

class Backup(Create): 

誰もが、私はそう、私はまだこのようなクラスのメソッドを呼び出すことができませんしようとしているものを達成する方法を知っています:Backup.Create.all()

+0

チェック 'スーパー()'関数:https://stackoverflow.com/questions/576169/understanding-python-super-with-init-methods –

+0

出演にもかかわらず、私は彼がに探しているとは思いませんあらゆる機能を拡張する。彼はそれらを巣に入れようとしている。 –

答えて

2

それを行うための1つの方法を希望外側の内部クラスをインポートすることです。

class Backup: 
    from Models.Create import Create 
    from Models.Delete import Delete 
    from Models.Restore import Restore 

あなたはこのようにそれを行う場合は、単にこれを行うことができますので、私は、「モデル」パッケージの__init__.pyにそれらのすべてをインポートします:

class Backup: 
    from Models import Create, Delete, Restore 

別のオプションは、インポートしている場合他の場所ではクラス内でそれらを割り当てるだけです。

class Backup: 
    Create = Models.Create.Create 
    Delete = Models.Delete.Delete 
    Restore = Models.Restore.Restore 
+0

__init__.pyにインポートするのはどういう意味ですか?例がありますか? – robertmylne

+0

Modelsディレクトリが動作するためには、あなたのModelsディレクトリに\ __ init__.pyがあると仮定しています。そのファイル内でクラスをそのパッケージのモジュール(Create、Delete、Restoreなど)からインポートする場合は、モジュールではなくパッケージからクラスを参照できます。たとえば、リクエストを見ることができます(https://github.com/requests/requests/blob/master/requests/__init__.py#L116)。要求セッションを作成するときは、requests.Sessions.Sessionの代わりにrequests.Sessionをインポートします。 –

関連する問題