蟒蛇。如何从* args中获取自定义类型对象

时间:2016-12-02 10:40:18

标签: python

我有以下方法:

def _loginEventHandler(cmdID, *args):
    if cmdID == Login.LOGIN_LOGED:
        user = args[0]
        print("User",user.userTypeID,"logged in")

从不同的模块中调用该方法:

user = User(nUserSelected)    
_loginEventHandler(Login.LOGIN_LOGED,user)

解释器抛出AttributeError:

  

文件“/main.py”,第79行,在_loginEventHandler中       print(“User”,user.userTypeID,“已登录”)   AttributeError:'tuple'对象没有属性'userTypeID'

问题是从* args获取参数的正确方法是什么(特别是如果它们是像“User”这样的自定义类型),为什么它从args [0]

获取元组?

2 个答案:

答案 0 :(得分:1)

您没有在方法的定义中包含self。传递给方法的第一个参数始终是实例本身。这意味着在您的方法中,cmdID正在获取实例的值,而args的第一个元素实际上是Login.LOGIN_LOGED的值,这可能是一个元组。

答案 1 :(得分:0)

所以我尝试提出User类的最小版本和Login Enum。但我在这里看不到任何问题。输出似乎没问题

from enum import Enum

class Login(Enum):
    LOGIN_LOGED = 1

class User:
    def __init__(self, userTypeID):
        self.userTypeID = userTypeID


user = User(1)    
_loginEventHandler(Login.LOGIN_LOGED, user)

给出了

('User', 1, 'logged in')
相关问题