0

Python 2.7.3を使用してWindows 7を実行していますが、理由がわからない継承エラーが発生しています。私はかなりの検索を行いましたが、まだあまり関連するものを見つけていません。

私の問題は、あるクラスから別のクラスに継承しようとすると AttributeError が発生し続けることです。私が持っている基本的な構造は次のようになります。

# pymyClass.py
class myClass(object):
    def __init__(self,aList=None):
        if aList is not None:
            myList = aList
        else:
            myList = ['','','','','']

    def reset(self,aList=None):
        if aList is not None:
            myList = aList
        else:
            myList = ['','','','','']
    #other methods operate without issue


# pymySecondClass.py
import pymyClass
class mySecondClass(pymyClass.myClass):
    def __init__(self,aList=None):
        pymyClass.myClass(aList)


# pymyThirdClass.py
import pymySecondClass
class myThirdClass(pymySecondClass.mySecondClass):
    def __init__(self,aList=None):
        pymySecondClass.mySecondClass(aList)

    def useList(self,aList=None):
        self.reset(aList)
        print self.myList


#pymyObj.py
import pymyThirdClass

myObj = pymyThirdClass.myThirdClass(['a','b','c','1','2'])
myObj.useList()

...しかし、myThirdClass() のインスタンス化を呼び出して useList() を呼び出すと、次のようにエラーが発生します。

AttributeError: 'myThirdClass' object has no attribute 'myList'

実際にここで例をコンパイルして同じ問題が発生したため、継承が期待どおりに機能しないと考えています。私はPythonのドキュメントをチェックしましたが、十分に近くないのでしょうか? 誰かがここで私を助けることができれば、それは非常に高く評価されます.

フィールド「myList」を myThirdClass コンストラクターに手動で含める必要があるかもしれないと考えていますが、それは信じられないほど不十分です。前もって感謝します!

4

2 に答える 2

4

実際にmyListインスタンスにアタッチすることはありません。これを(メソッド内で)行うには、次のことを行う必要があります。

self.myList = ...

だけでなく:

myList = ...

ここselfで、はメソッドに渡される最初の引数の従来の名前です。


また、派生クラスの基本クラスを呼び出す際にいくつかの問題があります。

class Foo(object):
   def __init__(self):
      print "I'm a Foo"

class Bar(Foo):
   def __init__(self):
      print "I'm a Bar"
      #This is one way to call a method with the same name on a base class
      Foo.__init__(self)

一部の人々はそれを次のように行うのが好きではありませんFoo.__init__(self)-それらの人々は使用しますsuperあなたが何をしているのかを知っている限り、これもOKです)。

于 2012-10-23T20:40:46.880 に答える
2

あなたは自己を忘れました:

# pymyClass.py
class myClass(object):
    def __init__(self,aList=None):
        if aList is not None:
            self.myList = aList
        else:
            self.myList = ['','','','','']

    def reset(self,aList=None):
        if aList is not None:
            self.myList = aList
        else:
            self.myList = ['','','','','']

このmylistがないと、if句の後に「破棄」されます。

于 2012-10-23T20:42:06.003 に答える