__call__ vs. __init__:谁得到了论点?谁先被叫?

时间:2012-09-23 17:11:59

标签: python class

  

可能重复:
  what is difference between init and call in python?

我正在尝试创建一个可调用的类,它将接受参数,然后将自身作为对象返回。

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):

1 个答案:

答案 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.