1

[更新]: 完全なコード

私は常にpyhtonのstaticmethodsと混同しますが、これ(最後の回答)によると、うまくいくはずです!

取得エラー:

AttributeError: クラス MyConnection に属性 'myuser' がありません

class MyConnection:
    def __init__(self, hostname, port, user, password):
        myhostname = hostname
        myport = port
        myuser = user
        mypassword = password
        isisessid = None

    @staticmethod
    def connect():
        my_session = MyConnection()

        headers = {'content-type': 'application/json'}
        headers['Authorization'] = 'Basic ' + string.strip(
            base64.encodestring(MyConnection.myuser + ':' + MyConnection.mypassword))

        body = json.dumps({'username': MyConnection.myuser, 'password': MyConnection.mypassword,
            'services': ['platform', 'namespace']})

        uri = '/session/1/session'

        connection = httplib.HTTPSConnection(MyConnection.myhostname, MyConnection.myport)
        connection.connect()

        try:
            connection.request('POST', uri, body, headers)
            response = connection.getresponse()
            my_session.isisessid = MyConnection.extract_session_id(
                response.getheaders())
        except Exception, e:
            print e
            connection.close()
        except httplib.BadStatusLine, e:
            print e
            connection.close()

        return my_session
4

4 に答える 4

5

属性が静的になる場合は、初期化メソッドでそれらを初期化しないでください。メソッド レベルではなく、クラス レベルで宣言してください。

しかし、なぜイニシャライザでクラス属性を初期化しているのでしょうか? 作成するすべてのインスタンスは、その値を上書きします!

インスタンス属性とクラス属性が何に使用されるのか混乱していると思います。インスタンス属性のみを使用してみませんか? すべてを考慮すると、静的データを持つことはお勧めできません。例えば:

class MyConnection:
    def __init__(self, hostname, port, user, password):
        self.myhostname = hostname
        self.myport = port
        self.myuser = user
        self.mypassword = password
    @staticmethod
    def connect():
        my_session = MyConnection()
        print my_session.myuser # just an example
于 2013-09-04T19:27:58.390 に答える