Python类与__init__方法

5 投票
2 回答
2974 浏览
提问于 2025-04-16 22:17

我正在通过《Dive Into Python》学习Python,遇到了一些问题,文档里也没能帮我解决。

1) BaseClass

2) InheritClass

当我们把一个InheritClass的实例赋值给一个变量时,如果InheritClass没有__init__方法,而BaseClass有,这到底发生了什么呢?

  • 是不是BaseClass__init__方法会自动被调用?
  • 另外,能不能告诉我一些其他的内部细节?

其实,fileInfo.py这个例子让我很头疼,我就是搞不懂事情是怎么运作的。接下来

2 个回答

4

@FogleBird已经回答了你的问题,但我想补充一点,无法在他的帖子下评论:

你可能还想看看super函数。这个函数可以让你在子类里面调用父类的方法。当你想要扩展一个方法时,这个功能特别有用,比如:

class ParentClass(object):
    def __init__(self, x):
        self.x = x

class ChildClass(ParentClass):
    def __init__(self, x, y):
        self.y = y
        super(ChildClass, self).__init__(x)

当然,这里面可以包含更复杂的方法,而不是 __init__ 方法或者同名的方法!

6

没错,BaseClass.__init__ 会自动被调用。其他在父类中定义但在子类中没有定义的方法也是一样。看看这个例子:

>>> class Parent(object):
...   def __init__(self):
...     print 'Parent.__init__'
...   def func(self, x):
...     print x
...
>>> class Child(Parent):
...   pass
...
>>> x = Child()
Parent.__init__
>>> x.func(1)
1

子类会继承父类的方法。子类可以选择重写这些方法,但并不是必须的。

撰写回答