В приведенном ниже коде класс User
должен получить доступ к функции get_user
внутри экземпляра класса WebService
, так как он содержит другие функции, необходимые для аутентификации с веб-сервером (last.fm). Фактический код: 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
Проблема в том, что ссылка должна храниться внутри каждого «пользователя». Есть ли другой способ сделать это? Или это только я, чрезмерное поведение, и так оно и работает в реальном мире?
Почему пользователь 'fill_profile' пользователя? Похоже, что имеет смысл иметь UserFactory, который вызывает службу (или просто обрабатывает ответ службы) и возвращает пользователя. –
Получить пользователь может вернуть объект тоже Я просто поместил фактическую логику заполнения атрибутов внутри него, потому что мне казалось, что 'User' нужно будет обрабатывать данные, так как есть другие функции (например,' get_top_albums' и 'get_friends') Должны ли каждая такая функция получить свой собственный индивидуальный класс? –
I второй @gilesc, когда GetUser возвращает пользователя. Что касается обработки таких вещей, как get_top_albums и get_friends, это зависит от того, как вы хотите смоделировать систему. Если вы не хотите кэшировать данные локально, я бы сказал, что просто вызывайте службу каждый раз с идентификатором пользователя. Если вы хотите кэшировать данные локально, вы можете передать объект User методу в WebService, а затем запустите этот элемент для пользователей. Вы должны принять дизайнерское решение, хотя либо имеете WebService, либо User (что, вероятно, было бы лучше), или просто UserWebService. –