Python 类中的队列对象是否可以覆盖self?

Python 类中的队列对象是否可以覆盖self?,python,python-3.x,queue,self,Python,Python 3.x,Queue,Self,我有一个python pexpect脚本,经常登录服务器,每次它尝试登录时,我都会得到一个DUO push,这是非常不可靠的(不确定是Android上的应用程序还是DUO系统本身,但这与我的问题无关)。我试图通过重复使用队列中的会话来避免DUO Push 我有一个名为Session的类来打开/关闭会话。我还定义了一个全局队列。每当我使用完一个会话,而不是关闭pexpect句柄时,我都会执行q.put(self)。self包含活动的pexpect会话。下次我需要登录时,首先检查队列中是否有项目。如

我有一个python pexpect脚本,经常登录服务器,每次它尝试登录时,我都会得到一个DUO push,这是非常不可靠的(不确定是Android上的应用程序还是DUO系统本身,但这与我的问题无关)。我试图通过重复使用队列中的会话来避免DUO Push

我有一个名为Session的类来打开/关闭会话。我还定义了一个全局队列。每当我使用完一个会话,而不是关闭pexpect句柄时,我都会执行q.put(self)。self包含活动的pexpect会话。下次我需要登录时,首先检查队列中是否有项目。如果有,我希望执行self=q.get(),从而用队列中的对象覆盖我的“self”。下面是我试图实现的示例代码:

from globals import q

class Session:
   def __init__(self, ip):
       self.user = flask_login.current_user.saneid
       self.pass = flask_login.current_user.sanepw
       self.ip = ip
       self.handle = None

   def __enter__(self):
       if not q.empty():
          self = q.get()
       else:
          # login to node
          self.handle = pexpect.spawn('ssh user@node')
          ...
       return(self.handle)

   def __exit__(self, *args):
       q.put(self)

这是好的做法吗?有更好的方法吗?

self
是方法内部的局部变量。如果需要,您可以重新分配它;它不会影响该方法之外的任何内容。这可能会让读者对你的方法有点困惑;你可以通过使用一个变量而不是
self
…来避免它,除此之外,即使它起作用也不是一个好的实践。明白了吗。不过,马蒂诺的评论并不清楚。从队列检索时保持相同名称(即self与其他变量名)的做法不好,或者使用队列存储对象的做法不好?为什么不在会话类之外管理队列。然后,您可以在退出时将会话实例推送到队列上。然后,您可以创建一个或多个会话实例,并使用它们的实例指针填充队列,并且仅在队列为空时创建新的会话类。在每个会话中,self值引用会话的实例,因此jnow每个队列入口指向不同的实例。右。我只是觉得把所有东西都放在同一个地方(比如创建/保存/发布会话)会更整洁。我明白了。