2017-07-20 12 views
0

多くのオンラインの例を参照して、私はpython3で継承を実装しようとしました。
ここでは、親クラス関数を使用して、クラス変数を子クラスに設定しようとしています。python基底クラス関数を実行するとエラーが発生する

class adapter(): 
    def __init__(mem): 
     mem.port=27017 
     mem.ins='172.36.36.1' 
     mem.klust=False 
     mem.net=True 
     mem.encryption=False 
    def mKonnect(mem): 
     eaeIns=mem.ins+':'+str(mem.port) 
     return mClient(eaeIns) 

class Fuse(adapter): 
    mongoConnect=super(Fuse,mem).mKonnect() 
    dbi=mongoConnect.eaedw.InstanceConfiguration 

このモジュールをインポートしながら、私は以下のエラーが出ます:

mongoConnect=super(Fuse,self).mKonnect() 

NameError: name 'Fuse' is not defined

を私は間違いを理解できなかったか、これは私の要件をコードの方法ではないでしょうか?

+0

なぜ 'self'の代わりに' mem'を使いますか? –

+0

特別な理由もなく、私は自分の名前を変更することができる文書を読んでいます。だから、試してみてください。私は使ってはいけませんか? –

+2

私は、あなたが欠けているメンバ関数の中でそれをやらなければならないというエラーを得る理由があると思います。 'mem'と' self'について、私はちょっと混乱していると思っています... –

答えて

0

super()aをクラス属性宣言として使用することはできません。

これは__init__の方法では機能しますが、あなたのクラス内にはselfまたはmemの名前を定義する必要があります。

class Fuse(adapter): 
    def __init__(self): 
     super(Fuse, self).__init__() 
     mongoConnect=super(Fuse,self).mKonnect() 
     dbi=mongoConnect.eaedw.InstanceConfiguration 

あるいは

class Fuse(adapter): 
    def __init__(self): 
     super(Fuse, self).__init__() 
     dbi=self.mKonnect().eaedw.InstanceConfiguration 

(あなたはselfの名前を変更することができますが、それは、あなたがそれを行う必要があるという意味ではありません、いくつかの規則がPythonであるあなたが他の誰かがあなたを読み、理解したい場合は、自己が良いですコードを簡単に)

+0

今はインポートは成功しますが、オブジェクトにアクセスすると失敗します:import mymodule as d; dd = d.Fuse();エラーeaeIns = self.ins + ':' + str(self.port) AttributeError: 'Fuse'オブジェクトに 'ins'属性がありません –

+0

@NNandu私は 'super(Fuse、self).__ init __()'をコンストラクタは、この問題を解決する必要があります – PRMoureu

+0

@NNandu私は物事をより複雑にしたと思うので、 'mongoConnect = self.mKonnect()'または 'dbi = self.mKonnect().eaedw.InstanceConfiguration'を直接呼び出すことができます。 'super(Fuse、self).__ init __()'を使うと、 – PRMoureu

関連する問題