Guest User

Untitled

a guest
Feb 23rd, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. import time
  2. from abc import ABCMeta, abstractmethod
  3.  
  4.  
  5. def main():
  6. p = PrinterProxy('Alice')
  7. print('名前は現在{}です'.format(p.get_printer_name()))
  8. p.set_printer_name('Bob')
  9. print('名前は現在{}です'.format(p.get_printer_name()))
  10. p.pprint('Hello, World')
  11.  
  12.  
  13. class Printable(metaclass=ABCMeta):
  14. @abstractmethod
  15. def set_printer_name(self, name):
  16. pass
  17.  
  18. @abstractmethod
  19. def get_printer_name(self):
  20. pass
  21.  
  22. @abstractmethod
  23. def pprint(self, string):
  24. pass
  25.  
  26.  
  27. class Printer(Printable):
  28. def __init__(self, name):
  29. self.__name = name
  30.  
  31. self.__heavy_job('Printerのインスタンス({})を作成中'.format(self.__name))
  32.  
  33. def set_printer_name(self, name):
  34. self.__name = name
  35.  
  36. def get_printer_name(self):
  37. return self.__name
  38.  
  39. def pprint(self, string):
  40. print('=== {} ==='.format(self.__name))
  41. print(string)
  42.  
  43. def __heavy_job(self, msg):
  44. print(msg, end='')
  45. for _ in range(5):
  46. time.sleep(1)
  47. print('.', end='')
  48.  
  49. print('完了')
  50.  
  51.  
  52. class PrinterProxy(Printable):
  53. def __init__(self, name):
  54. self.__name = name
  55. self.__real = None
  56.  
  57. def set_printer_name(self, name):
  58. if self.__real is not None:
  59. self.__real.set_printer_name(name)
  60.  
  61. self.__name = name
  62.  
  63. def get_printer_name(self):
  64. return self.__name
  65.  
  66. def pprint(self, string):
  67. self.__realize()
  68. self.__real.pprint(string)
  69.  
  70. def __realize(self):
  71. '''本人を生成'''
  72. if self.__real is None:
  73. self.__real = Printer(self.__name)
  74.  
  75.  
  76. if __name__ == '__main__':
  77. main()
Add Comment
Please, Sign In to add comment