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 に答える