2016-09-27 30 views
1

Python: 我正在使用請求模塊來處理API,我正在使用類。我得到一個屬性錯誤:Python:在類中實例化類B實例化<class A name>對象沒有屬性<class B屬性>

apic.py模塊:(A類)

import requests 
import json 

class Ses: 

    def __init__(self): 
     self = requests.Session() 
     self.headers = {'Content-Type': 'application/json'} 
     print(self.headers) 

    def login(self, cname, uname, pword): 
     res = self.post('https://api.dynect.net/REST/Session/', params = {'customer_name': cname, 'user_name': uname, 'password': pword}) 
     self.headers.update({'Auth-Token': json.loads(res.text)['data']['token']}) 
     print(json.loads(res.text)['msgs'][0]['INFO'], '\n') 
     return json.loads(res.text) 

腳本:

import requests 
import apic 

sesh = apic.Ses() 

print(sesh.login()) 
  • AttributeError的:「的SES 'object has no attribute'post'

如果我刪除調用從APIC登錄():

sesh = apic.Ses() 

我可以看到它打印self.headers(sesh.headers)就好了:

  • { 'Content-Type':'application/json'}

所以看來我的語法是腳本是問題。

.Session是在請求一個類(類B)

.POST和.headers是在會話類的功能。

我的問題:

如果我實例化類B類一實例,B類

的我應該如何調用屬性如果我只是不嘗試呢? (我正在用這種方式來清理我的腳本,這不是我需要做的事情。)

+1

'self = requests.Session()'永遠不會分配給'self'。這是行不通的。 –

+0

或者繼承('class Ses(requests.Session):')或者compose('se​​lf.session = requests.Session()');後者可能會更容易。 – jonrsharpe

回答

1

您不能只分配給self。這只是__init__方法中的局部變量。

我不知道你爲什麼要這麼做。相反,您應該將會話定義爲實例的屬性:

def __init__(self): 
    self.session = requests.Session() 
    self.session.headers = {'Content-Type': 'application/json'} 
    print(self.session.headers) 

def login(self, cname, uname, pword): 
    res = self.session.post('https://api.dynect.net/REST/Session/', params = {'customer_name': cname, 'user_name': uname, 'password': pword}) 
    ... 
相關問題