跨类

时间:2016-08-10 21:55:17

标签: python session python-requests

我有来自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>

1 个答案:

答案 0 :(得分:2)

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

import requests

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

    def test(self):
        print self.s