python - __call__ 与 __init__ : Who gets the arguments? 谁先被调用?

标签 python class

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

最佳答案

__call__ 仅在将自身定义为可调用的实例上调用。

__init__ 是提供类实例的初始值设定项

如果你做了类似的事情

MyObject()() 然后您正在初始化 THEN 调用。

使用您自己的示例

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.

关于python - __call__ 与 __init__ : Who gets the arguments? 谁先被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12554397/

相关文章:

python - 如何从包含单行所有关系的csv文件中获取关系数据?

c++ - 调用其他文件的匿名命名空间中的函数的内联类方法

sql - 使用 visio 2007,如何表示触发器和存储过程?

python - 属性错误: 'tuple' object has no attribute 'strip' : Flask Markdown?

python - Django 1.8 使用 gmail SMTP 发送邮件

Javascript访问父公共(public)变量

java - 通过 JNI 将 C++ 类返回给 Java

javascript - 如何为 Angular 应用程序组织类(class)?

python - type 和 object 原始对象的区别

python - django-mutant 在 django-admin 中创建模型