2016-08-10 3 views
1

У меня есть MyClass класса с сессией из requestsОдин сеанс нескольких экземпляров класса

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> 

как объект сеанса от а и Ь такое же один? Я ожидаю, что у вас будет два разных сеанса для одного и другого для b.

не думаю, Session - одиночный. Как показано на рисунке, вызовите requests.Sessions() дважды и создайте два разных экземпляра сеанса. Итак, почему сессия в a и b такая же?

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> 
+0

Ваш 's' является атрибутом класса, поэтому она хранится один раз, на классе. Google, чтобы найти gazillions вопросов о различии между атрибутами класса и экземпляра в Python. – BrenBarn

+0

ugh .. спасибо .. новичок в python: p – codereviewanskquestions

+0

выглядит как синтаксис Java, но это не так! –

ответ

2

s является атрибутом класса в вашем случае - это будет инициализирован один раз и общие для всех экземпляров класса. Сделайте сессию переменной экземпляра вместо:

import requests 

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

    def test(self): 
     print self.s 
Смежные вопросы