我有以下方法:
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]
获取元组?答案 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')