关于python中类的继承及self

shallty_ht
  • 7

关于python中类的继承及self
如下,如果调用student类,则可以正常运行,但是如果去掉consumer.__init__(self, fee)中的self,将其改成consumer.__init__(fee),则不能正常调用,会显示consumer中缺少参数。但是,person类的调用缺没问题。
如下,我定义三个类:

class person(object):
    def __init__(self, name, sex='U'):
        self.name = name
        self.sex = sex
        print('the one is %s' % self.name)

class consumer(object):
    def __init__(self, fee):
        self.fee = fee
        print('the one\'s consumer is %d' % fee)

class student(person, consumer):
    def __init__(self, name, score, fee, sex):
        super(student, self).__init__(name, sex)
        consumer.__init__(self, fee)

----------------------------分割一下----------------------------------------
补充一下描述好了,之前没太说清楚。这在python3中是有效的,然后我提这个问题的主要目的是要搞清楚为什么会出现在super中有效而下面一个consumer.__init__中却无效的问题?有没有大神给解释下?

回复
阅读 1.9k
2 个回答
yszou
  • 4.9k
但是,person类的调用缺没问题。

并没有。一样有问题。


然后我提这个问题的主要目的是要搞清楚为什么会出现在super中有效而下面一个consumer.__init__中却无效的问题?

super 中是一个 bound method ,而 consumer.__init__unbound method

关于 boundunboundhttps://stackoverflow.com/que...

上面,这个答案是最好的:

clipboard.png

子类重写了父类方法,又需要父类方法中的功能,此时有两种方式调用父类方法中的功能:
super(student, self).__init__(name, sex)和consumer.__init__(self, fee)
前一种方式中,super后面的两个参数都可以省略,init方法中的参数不能省略
后一种方式中,init方法的中参数不能省略

宣传栏