0

以下のコードでは、クラスはクラスのインスタンス内の User関数にアクセスする必要があります。これには、Webサーバー(last.fm)での認証に必要な他の関数が含まれているためです。実際のコードはこちらです。get_userWebService

class WebService:

    def __init__(self, key):
        self.apikey = key

    def get_user(self, name):
        pass # Omitted

class User:

    def __init__(self, name, webservice):
        self.name = name
        self.ws = webservice

    def fill_profile(self):
        data = self.ws.GetUser(self.name)
        # Omitted

問題は、すべての「ユーザー」内に参照を保持する必要があることです。これを行う別の方法はありますか?それとも私だけが物事を複雑にしすぎているのでしょうか、そしてこれが実際に現実の世界でどのように機能するのでしょうか?

4

2 に答える 2

2

Webサービスオブジェクトがすべてのユーザーで同じである場合は、参照を静的変数にすることができます。

構文は次のとおりです。

class User:
    webservice = ...
...

そうすれば、インスタンスからアクセスすることもできUserますが、そのように割り当てることはできません。これにはUser.webservice構文が必要になります。

また、コメントで提案されている優れた設計の代替案を取得しています。

于 2012-05-31T20:36:19.820 に答える
2

要求に応じて:get_top_albumsやget_friendsなどの処理に関しては、システムをどのようにモデル化するかによって異なります。データをローカルにキャッシュしたくない場合は、ユーザーIDを使用して毎回サービスを呼び出すだけです。データをローカルにキャッシュする場合は、UserオブジェクトをWebServiceのメソッドに渡してから、メソッドにUserのメンバーを設定させることができます。WebServiceとUser(おそらく最良のもの)を使用するか、UserWebServiceのみを使用するかは、設計上の決定を行う必要があります。

于 2012-05-31T21:13:57.977 に答える