访问另一个类的函数而不在每个实例中引用?

时间:2012-05-31 20:08:41

标签: python last.fm

在下面的代码中,User类需要访问get_user类实例中的函数WebService,因为它包含与Web服务器进行身份验证所需的其他功能(最后一个)。调频)。实际代码为here

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

问题是需要在每个'用户'内部保存一个引用。还有另一种方法吗?或者只是我过于复杂的事情,这是它在现实世界中的实际运作方式?

2 个答案:

答案 0 :(得分:2)

如果所有用户的Web服务对象都相同,您当然可以创建引用a static variable

语法为:

class User:
    webservice = ...
...

然后,您甚至可以从User实例访问它,但不能以这种方式分配它,这需要User.webservice语法。

您也会在评论中提出好的设计方案。

答案 1 :(得分:2)

根据要求: 至于处理get_top_albums和get_friends之类的东西,这取决于你想如何建模系统。如果您不想在本地缓存数据,我会说每次都使用用户ID调用该服务。如果您确实想在本地缓存数据,可以将User对象传递给WebService中的方法,然后让该方法填充User的成员。您必须做出设计决策,但要么拥有WebService和User(可能是最好的),要么只是UserWebService。