Python对象定义

Ski*_*man 0 python oop object instantiation

这应该很容易,但因为我遗漏了一些东西.

我有一个完全符合我预期的对象.

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 
Run Code Online (Sandbox Code Playgroud)

好的,很好,我可以实例化它,它完全符合我的要求.但我真的想创建一个更具体的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']
Run Code Online (Sandbox Code Playgroud)

但是当我尝试实例化它时,这有效:

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

但这不是

ee = CiteElement(element, self.raw[element])
Run Code Online (Sandbox Code Playgroud)

而是给我这个错误:

TypeError: __init__() takes exactly 3 arguments (1 given)
Run Code Online (Sandbox Code Playgroud)

显然我错过了一些小事.python对象的关键.我应该知道的东西,但已经编写了多年.但它是什么?

Mal*_*lio 6

这条线

super(CiteElement, self).__init__()
Run Code Online (Sandbox Code Playgroud)

应该

super(CiteElement, self).__init__(name, data)
Run Code Online (Sandbox Code Playgroud)