Skip to content

Instantly share code, notes, and snippets.

@svetlyak40wt
Created August 8, 2017 10:10
Show Gist options
  • Save svetlyak40wt/ae5fa23755642182026d10c650b153d5 to your computer and use it in GitHub Desktop.
Save svetlyak40wt/ae5fa23755642182026d10c650b153d5 to your computer and use it in GitHub Desktop.
class Store(object):
def store(self, data):
raise NotImplemented()
def prepare(self, data):
# тут может быть какой-то общий код, который переиспользуется разными реализациями.
class CloudStore(object):
def __init__(self, login, password):
self.login = login
self.password = password
super(CloudStore, self).__init__()
def store(self, data):
prepared = self.prepare(data)
send_data_to_the_cloud(prepared)
class FileStore(object):
def __init__(self, filename):
self.filename = filename
super(FileStore, self).__init__()
def store(self, data):
prepared = self.prepare(data)
with open(self.filename, 'w') as f:
json.dump(f, prepared)
def bot_algorithm(store):
data = do_something_useful()
# тут мы не знаем, что за store был передан
# важно лишь то, что у него есть метод store
store.save(data)
@mihalt
Copy link

mihalt commented Aug 8, 2017

super(CloudStore, self).__init__() — эту строку немного не понял. Она берёт метод init у класса object?

store.save(data) — а где метод save?

@svetlyak40wt
Copy link
Author

А нет, конечно я забыл в качестве базового класса у CloudStore и FileStore указать Store.

И вметос store.save(data) должно быть store.store(data), это ты тоже верно подметил.

@mihalt
Copy link

mihalt commented Aug 10, 2017

@svetlyak40wt
Всё равно не понял, как работает скрипт.

Там же вроде store.store(data) только исключение выводит NotImplemented() и всё

Разве не нужно явно вызывать другой класс, например, чтобы отправить в облако:
CloudStore.store(data) в 35 строке?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment