0

これは簡単なはずですが、何かが足りないからです。

期待どおりに機能するオブジェクトがあります。

class TextElement(ContentItemElement):
    '''
    Single String Elements, for example, headlines
    '''
    def __init__(self, name, data):
       super(TextElement, self).__init__()
       self.name=name
       self.text=data


    def prettyPrint(self):
        printstring =  u'*HTML* '
        self.name.encode('utf-8')
        printstring += u'<h3> '+self.name+u' </h3>'
        self.text.encode('utf-8')
        printstring += u'<p> '+self.text+u' </h3>'
        print printstring 

わかりました。それをインスタンス化することができます。まさに私が望んでいることを実行します。しかし、私はより具体的なバージョンの TextObjects を作成したいと考えています。だから私はこれをします:

class CiteElement(TextElement):
    '''
    Single String Elements, for example, headlines
    '''
    def __init__(self, name, data):
        super(CiteElement, self).__init__()
        self.validValues=['Crap I make up', 'Crap I found on the web']

しかし、インスタンス化しようとすると、これは機能します:

ee = TextElement(element, self.raw[element])
ee.validValues=['Crap I make up', 'Crap I found on the web']

しかし、これはしません

ee = CiteElement(element, self.raw[element])

代わりに、このエラーが表示されます:

TypeError: __init__() takes exactly 3 arguments (1 given)

明らかに、私は何か小さなものを見逃しています。Python オブジェクトの鍵となるもの。私がよく知っているはずのことですが、何年もコーディングしてきました。しかし、それは何ですか?

4

2 に答える 2

6

この行

super(CiteElement, self).__init__()

する必要があります

super(CiteElement, self).__init__(name, data)
于 2013-01-15T16:18:43.787 に答える
3

基本クラスのコンストラクターは次のように定義されているため

def __init__(self, name, data):
....

そして、派生クラスからパラメーターなしで呼び出しています。

def __init__(self, name, data):
    super(CiteElement, self).__init__()
于 2013-01-15T16:19:05.573 に答える