2017-04-06 41 views
3

私はPythonで新しく、2つの異なるソースファイルに同じ名前の2つのクラスを作成しようとしています。それらを「Main.py」と「Extension.py」と呼び、クラスは"私のクラス"。 Ex.pyntion.pyのMyClassは、Main.pyのMyClassから派生したものです。それがうまくいけば、オブジェクトmyclassを作成すると、私は自分のコードでExtensionをインポートします。それで、私は、Main.pyと比較してより多くの機能を持っています。Pythonで同じ名前のクラスを継承する

Main.py

class MyClass: 
     def __init__(self): 
     Initialize something 

     def foo1(self, a, b): 
     Do something 

その後の拡張は、次のように次のようになります。 Extensions.py

import Main 

    class MyClass(MyClass): 
     def __init__(self): 
     Initialize something 

     def foo2(self, a, b): 
     Do something 

     def foo3(self, a, b): 
     Do something 

と私はこのようなコードを持っているならば、私はfoo2は使用しないことを期待しますfoo3

import Main 

    myclass = MyClass() 
    myclass.foo1(a, b) 

最後に、このようなコードがある場合は、すべての関数

import Extension 

    myclass = MyClass() 
    myclass.foo1(a, b) 
    myclass.foo2(a, b) 
    myclass.foo3(a, b) 

任意の助けいただければ幸い:)

+0

あなたは '{からの知っていますので、あなたの第二のクラスがあるファイルで、として最初のクラスをインポートしますsome.module} import {some_name} 'フォーム? –

+0

はい、それは私が探している何かをすることができますか? – Mohsen67

+0

他の人たちはすでに私を答えに打ちのめされていましたが、輸入からここに行く道があります。あなたが求めているものはかなり簡単になります –

答えて

3

あなたは

import main 

を行う場合は、main.py.からオブジェクトを作成するためにmain.MyClassを使用する必要があります

代わりに、直接それが利用できる持っている

from main import MyClass 

を行うことができます。

同じ名前を持つ2つの異なるクラスが必要な場合は、代わりに

from main import MyClass as MainClass 

を行うことができますし、あなたがfrom Extension import *を行う場合を除き、あなたが名前MainClass

1

下で利用可能なクラスを持っているよ、あなた'LLクラスにアクセスするためにモジュールを指定する必要があります。

import Main 
import Extension 
foo = Main.MyClass() 
bar = Extension.MyClass() 

あなたはモジュールを指定する必要がしたくない場合は、名前の衝突を回避する唯一の方法は、そのような別の名前でクラスをインポートすることです:

from Main import MyClass as ClassA

1

与えられた名前をfrom {module} import {name}の構文を使って明示的にインポートすると非常に簡単です。

main.py

class MyClass: 
    def __init__(self): 
     pass 

    def foo1(self, a, b): 
     pass 

extensions.py

from main import MyClass 

class MyClass(MyClass): 
    def __init__(self): 
     pass 

    def foo2(self, a, b): 
     pass 

    def foo3(self, a, b): 
     pass 

client_main。PY

from main import MyClass 

myinstance = MyClass() 
myinstance.foo1(a, b) 

client_extensions.py

from extensions import MyClass 

myinstance = MyClass() 
myinstance.foo1(a, b) 
myinstance.foo2(a, b) 
myinstance.foo3(a, b) 
0

は、一般的に、この場合には、あなたはimport asを行うだろう。これにより、インポートを新しい名前にエイリアスすることができます。あなたの継承を行う際MainMyClassを参照してください、そして、

from main import MyClass as MainMyClass

class MyClass(MainMyClass):

関連する問題