我正在尝试理解某个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__
函数?
答案 0 :(得分:6)
如果派生类没有__init__
函数,则父类的类__init__
将被继承并调用。
如果派生类的__init__
函数没有调用父项__init__
,则不会调用父项__init__
。