0

在下面的代码中,User类需要访问类get_user实例中 的函数WebService,因为它包含与 Web 服务器 (last.fm) 进行身份验证所需的其他函数。实际代码在这里

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 和一个用户(可能是最好的),要么只是一个 UserWebService。

于 2012-05-31T21:13:57.977 回答