2016-09-27 2 views
1

Python: リクエストモジュールを使用してAPIを使用しています。クラス。Python:クラス内でクラスBをインスタンス化するインスタンス化、<class A name>オブジェクトに属性<class B attribute>がありません

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私は属性のエラーを取得しています'オブジェクトには「投稿」の属性はありません

私はAPICから)(ログインする呼び出しを削除する場合:

sesh = apic.Ses() 

私はそれだけで罰金self.headers(sesh.headers)出力します見ることができます:

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

これは私の構文が問題であるようです。

.Sessionは、要求のクラス(クラスB)

.postと.headersセッションクラスの関数です。

私の質問:

私はちょうどこれをしようとするべきではありませんどのように私はクラスB

の属性を呼び出すべきである、クラスのインスタンス化をクラスBのインスタンスを作成していますか? (私はこの方法でクラスを使ってスクリプトを整理しようとしていますが、それは必ずしも必要なものではありません)

+1

'self = requests.Session()' 'self'に割り当てないでください。それは動作しません。 –

+0

inherit( 'class Ses(requests.Session):')またはcompose( 'self.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}) 
    ... 
関連する問題