【问题标题】:One session across multiple instances of a class跨类的多个实例的一个会话
【发布时间】:2016-08-11 05:57:00
【问题描述】:

我有来自requests 的带有 Session 的 MyClass 课程

import requests

class MyClass(object):
    s = requests.Session()

    def test(self):
        print self.s

然后我测试了

In[3]: a = mymodule.MyClass()
In[4]: b = mymodule.MyClass()
In[5]: print a
<mymodule.MyClass object at 0x10e074c50>
In[6]: print b
<mymodule.MyClass object at 0x10e074d10>
In[7]: a.test()
<requests.sessions.Session object at 0x10dbe5550>
In[8]: b.test()
<requests.sessions.Session object at 0x10dbe5550>

来自 a 和 b 的会话对象如何相同?我希望创建两个不同的会话,一个用于 a,另一个用于 b。

我不认为Session 是单身人士。如图所示,调用requests.Sessions() 两次并创建了两个不同的 Session 实例。 那么为什么ab 中的会话是一样的呢?

In[13]: s1 = requests.Session()
In[14]: s2 = requests.Session()
In[15]: print s1
<requests.sessions.Session object at 0x10e089210>
In[16]: print s2
<requests.sessions.Session object at 0x10e089650>

【问题讨论】:

  • 你的s 是一个类属性,所以它被存储一次,在类上。谷歌可以找到关于 Python 中类和实例属性之间差异的大量问题。
  • 呃 .. 谢谢 .. python 新手:p
  • 看起来像 Java 语法,其实不是!

标签: python session python-requests


【解决方案1】:

s 在您的情况下是一个类属性-它将被初始化一次并在所有类实例之间共享。将会话改为实例变量

import requests

class MyClass(object):
    def __init__(self):
        self.s = requests.Session()

    def test(self):
        print self.s

【讨论】:

    猜你喜欢
    • 2017-08-21
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多