Python类与__init__方法
我正在通过《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
子类会继承父类的方法。子类可以选择重写这些方法,但并不是必须的。