1

我试图了解某种 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__课堂上没有Person。该类Base有一个__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__函数呢?

4

1 回答 1

6

如果派生类没有功能,就会继承并调用__init__父类。__init__

如果派生类有一个不调用父类的__init__函数,则不会调用父__init____init__

于 2012-07-25T12:38:14.497 回答