派生类不会调用init

时间:2012-07-25 12:36:30

标签: python

我正在尝试理解某个OAuth2 / web2py集成,但是python类模型中的一些怪癖使我难以理解。具体来说,我有这个web2py控制器:

def google():
    if 'state' in request.vars and request.vars.state == 'google':
        session.state = request.vars.state
    person = Person("google")
    print person.render()
    return person.render()

所以我们在这里使用Person类。实现是这样的:

class Person(Base):

__init__课程中没有PersonBase类具有__init__函数:

class Base(object):
    def __init__(
        self,
        hooks=[],
        theme="%(name)s/",
        view="app/generic",
        meta=None,
        context=None
        ):
        from gluon.storage import Storage
        self.meta = meta or Storage()
        self.context = context or Storage()
        self.context.alerts = []
        self.context.content_types = []
        self.context.categories = []
        self.context.menus = []
        self.context.internalpages = []
        self.theme = theme
        self.view = view

        # hooks call
        self.start()
        self.build()
        self.pre_render()

        # aditional hooks
        if not isinstance(hooks, list):
            hooks = [hooks]

        for hook in hooks:
            self.__getattribute__(hook)()

所以我的问题如下:如果Person未明确调用Base.__init__,是否会被调用?

或者,为了使它更通用:如果派生类没有__init__函数,是否会调用基类__init__函数?如果派生类具有__init__函数但未显式调用基类__init__函数?

1 个答案:

答案 0 :(得分:6)

如果派生类没有__init__函数,则父类的类__init__将被继承并调用。

如果派生类的__init__函数没有调用父项__init__,则不会调用父项__init__