何时在定义类时在括号中使用“对象”?

时间:2018-04-05 19:36:35

标签: python python-2.7 class oop super

我很困惑何时在定义一个类时将'object'放入括号中:

下面的示例代码,第一个在括号内有'object',它运行正常,但没有'object',它会产生错误,为什么?

class ClassA(object):
    def __init__(self,x,y):
        print 'this is ClassA', x, y
        self.x = x
        self.y = y

    def methodA(self):
        print 'methodA: %s %s' % (self.x, self.y)

class ClassB(ClassA):
    def __init__(self, **kwargs):
        super(ClassB, self).__init__(x=kwargs.get('x'), y=kwargs.get('y'))


*********************************************
CALLING FUNCTION
*********************************************
objA = ClassA(1,2)
objA.methodA()
print '-'*10
objB = ClassB(x=3,y=4)
objB.methodA()

*********************************************
RESULT - OK
*********************************************

this is ClassA 1 2
methodA: 1 2
----------
this is ClassA 3 4
methodA: 3 4

如果我在括号内定义没有'object'的classA(),它就会失败。为什么:

class ClassA():
    def __init__(self,x,y):
        print 'this is ClassA', x, y
        self.x = x
        self.y = y

    def methodA(self):
        print 'methodA: %s %s' % (self.x, self.y)

class ClassB(ClassA):
    def __init__(self, **kwargs):
        super(ClassB, self).__init__(x=kwargs.get('x'), y=kwargs.get('y'))


*********************************************
CALLING FUNCTION
*********************************************
objA = ClassA(1,2)
objA.methodA()
print '-'*10
objB = ClassB(x=3,y=4)
objB.methodA()

*********************************************
RESULT - FAIL
*********************************************
this is ClassA 1 2
methodA: 1 2
----------
Traceback (most recent call last):
  File "C:\Users\jxue\git\TrendLinkPlot\test.py", line 23, in <module>
    objB = ClassB(x=3,y=4)
  File "C:\Users\jxue\git\TrendLinkPlot\test.py", line 15, in __init__
    super(ClassB, self).__init__(x=kwargs.get('x'), y=kwargs.get('y'))
TypeError: super() argument 1 must be type, not classobj

0 个答案:

没有答案