我试图了解某种 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__
函数呢?