特定の 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__
?