我正在尝试创建一个可调用的类,它将接受参数,然后将自身作为对象返回。
class User(object):
def __init__(self, loginName, password):
self.loginName = loginName
def __call__(self):
if self.login():
return self
return None
def login(self):
database = db.connection
realUser = database.checkPassWord(self.loginName, self.password)
return realUser
我的问题是,如果我这样称呼这个对象:
newUserObject = User(submittedLoginName)
__init__
之前会__call__
被调用吗? __init__
应该得到论证,还是应该将论证转移到__call__
,如
def __call__(self, loginName):
答案 0 :(得分:3)
__call__
仅在将自身定义为可调用的实例上调用。
__init__
是提供类
如果您执行类似
的操作 MyObject()()
然后你正在初始化然后打电话。
使用您自己的示例
class User(object):
def __init__(self, loginName, password):
self.loginName = loginName
self.password = password
def __call__(self):
if self.login():
return self
return None
def login(self):
database = db.connection
return database.checkPassWord(self.loginName, self.password)
a = User("me", "mypassword")
a = a() # a is now either None or an instance that is aparantly logged in.