Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import time
- from abc import ABCMeta, abstractmethod
- def main():
- p = PrinterProxy('Alice')
- print('名前は現在{}です'.format(p.get_printer_name()))
- p.set_printer_name('Bob')
- print('名前は現在{}です'.format(p.get_printer_name()))
- p.pprint('Hello, World')
- class Printable(metaclass=ABCMeta):
- @abstractmethod
- def set_printer_name(self, name):
- pass
- @abstractmethod
- def get_printer_name(self):
- pass
- @abstractmethod
- def pprint(self, string):
- pass
- class Printer(Printable):
- def __init__(self, name):
- self.__name = name
- self.__heavy_job('Printerのインスタンス({})を作成中'.format(self.__name))
- def set_printer_name(self, name):
- self.__name = name
- def get_printer_name(self):
- return self.__name
- def pprint(self, string):
- print('=== {} ==='.format(self.__name))
- print(string)
- def __heavy_job(self, msg):
- print(msg, end='')
- for _ in range(5):
- time.sleep(1)
- print('.', end='')
- print('完了')
- class PrinterProxy(Printable):
- def __init__(self, name):
- self.__name = name
- self.__real = None
- def set_printer_name(self, name):
- if self.__real is not None:
- self.__real.set_printer_name(name)
- self.__name = name
- def get_printer_name(self):
- return self.__name
- def pprint(self, string):
- self.__realize()
- self.__real.pprint(string)
- def __realize(self):
- '''本人を生成'''
- if self.__real is None:
- self.__real = Printer(self.__name)
- if __name__ == '__main__':
- main()
Add Comment
Please, Sign In to add comment