Python类结构,允许使用多种身份验证方法

Python类结构,允许使用多种身份验证方法,python,class,object,inheritance,Python,Class,Object,Inheritance,我正在构建一个应用程序,其中一个包管理多个身份验证方法 现在它支持LDAP和PAM,但我希望将来它支持更多 我有一个包裹 PAM.py和 LDAP.py 例如PAM.py内容: import pam class pam_auth: def __init__(self, username=None, password=None): self.username=username self.password=password def login(s

我正在构建一个应用程序,其中一个包管理多个身份验证方法

现在它支持LDAPPAM,但我希望将来它支持更多

我有一个包裹
PAM.py
LDAP.py

例如PAM.py内容:

import pam

class pam_auth:

    def __init__(self, username=None, password=None):
        self.username=username
        self.password=password

    def login(self):        
        res_auth=pam.authenticate(username=self.username, password=password)
        return res_auth
在另一个包中,我有下一个类登录:

class Login:

    def __init__(self,method=None):
        self.authmethod=method

    def login(self):        
        res_login=self.authmethod.login()

        return res_login
现在我正在构建我的身份验证代码,如下所示:

p=pam_auth()
p.username="pep"
p.password="just"

l=Login(method=p)
print l.login
我相信这并不是最好的方法,而是用多种不同的方法来思考。 例如,可能类似于?:

l=Login(method=PAM.pam_auth)
l.username="pep"
l.password="just"
print l.login()

?我必须在Login类或PAM类中更改什么才能以这种方式工作?

对于您提到的更改,您所需要做的只是在
Login
\uuu init\uuuu
中实例化类:

class Login:
    def __init__(self,method):
        self.authmethod=method()
然而,正如Stefano Sanfilippo所提到的,这实际上可能会妨碍模块化,因为突然
Login
必须知道身份验证方法的构造函数参数


还有一些提示:

如果您正在编写python 2,则需要创建:

而不是

class Login:
使用


此外,如果您正在编写一个通用身份验证层,您可能不想明确地处理用户名和密码:当您将来想要使用第三方身份验证、智能卡或生物特征验证时,会发生什么情况?您可能应该原封不动地处理身份验证方法接收到的不透明“数据”。

相反,我认为前者比后者具有更大的灵活性。此外,许多工作解决方案中都是这样设计身份验证的……除此之外,de PAM类中的参数就没有了?是的,我的想法是,您可以覆盖一个类,不仅支持用户名或密码,还支持与身份验证方法相关的每个参数。正如你所说,生物特征识别等不需要usename等@ManuParra正如我所说,如果你采用这种方法,登录“必须知道身份验证方法的构造函数参数”。最大的问题是,这些构造函数参数将根据auth方法的不同而变化。您可以将它们作为
*args、**kwargs
传递,但最好是在登录外部实例化并传递一个实例,就像您当前所做的那样。
class Login(object):