ååãŸã§ã¯äž»ã«ãPythonã®ãªããžã§ã¯ãæåã®ææ³ã®è©±ãããŸãããä»åã¯ç¹ã«æ°ããææ³ã«ã€ããŠæ±ããŸããããããããããªããžã§ã¯ãæåãã©ã䜿ãã®ãããšããããšã«çç®ããããšæããŸãã
ãªããžã§ã¯ãã£ãŠäœ?
ãããªãããããè«ã§ãããªããžã§ã¯ãæåã®ããªããžã§ã¯ããã£ãŠå ·äœçã«ã¯äœãªãã§ããããã
çµè«ããèšã£ãŠããŸããšããªããžã§ã¯ããšã€ã³ã¹ã¿ã³ã¹ã¯éåžžã«è¿ãååšã§ãããã ãã€ã³ã¹ã¿ã³ã¹ã¯ãã¯ã©ã¹ããçæãããããšããæå³åãã匷ããããã¯ä»¥åã話ãããããçŒãã®åæ ãšããçŒããšãã£ããããªæèã§äœ¿ãããŸããããã«å¯ŸããŠããªããžã§ã¯ãã¯ãããç¹å®ã®é åãã«ããŒããå®äœããšããæå³åãã匷ããããããŸããããŸããã¯ã©ã¹ãšã¯ã©ã¹ã®é£æºãæèããéãããªããžã§ã¯ãããšããèšèãè¯ã䜿ãããŸãã
ãããç¹å®ã®é åãã«ããŒããå®äœããã飿ºããšèšãããŠãå°ããããã«ãããšæãã®ã§äŸããããŠèª¬æããŸãããã以äžã®å³ãèŠãŠãã ããã
ããã¯ç°¡åãªWebãµãŒãã¹ãäœãéã«å¿ èŠãªäººç©ãšãããããã®ä»äºããã³é¢ä¿ã瀺ããŠããŸã(éçºè«ã«ã€ããŠã®è©±é¡ã§ã¯ãªãã®ã§ããã£ãšããããã»ãããããšãããããªããšã¯çœ®ããŠãããŠãã ãã)ã
äžå³ãèŠãŠãããããã«ããããã®ç»å Žäººç©ãæããã¹ãä»äºã¯æç¢ºã«åããããŠãããå人ç©ã®éã®é¢ä¿ãæç¢ºã§ãããã®å³ã«ãããããããã®ç»å Žäººç©ãããªããžã§ã¯ãæåã®ãªããžã§ã¯ãã«ããããŸãã
ã€ãŸãããªããžã§ã¯ãæåã«ããããªããžã§ã¯ãã¯åã«ã¯ã©ã¹ããçæãããå®äœ(ã€ã³ã¹ã¿ã³ã¹)ã§ãããšããæå³åãã ãã§ãªãã以äžã®ç¹åŸŽããããŸãã
- ãããããæãã圹å²ãæç¢ºã«æ±ºãŸã£ãŠãã
- ãªããžã§ã¯ãå士ã飿ºãããŠå šäœåãäœã
ãã®ã圹å²ãæç¢ºãã飿ºãããŠå šäœãšãªãããšãã£ãããšã¯æç¶ãåèšèªã§ãå®çŸå¯èœã§ãããå®éã«åªç§ãªãšã³ãžãã¢ã¯ããããæèããŠèšèšãè¡ããŸãããã ããªããžã§ã¯ãæåèšèªã¯ãèšèšããæ£ãããã°ãããã容æã«å®çŸã§ããã®ã«å¯ŸããŠãæç¶ãåèšèªã¯åããã°ã©ãã®æéã«åŒ·ãäŸåãããªããã€å šäœã§æ å ±ã®å ±æãããå€ãå¿ èŠãšããŸããèŠã¯ãæç¶ãåèšèªã§ã¯éçºã®ãªãŒããŒãåããã°ã©ãã®è ãæªããšç°¡åã«ã¢ãŒããã¯ãã£ã厩å£ãããšããããšã§ãã
ãªããžã§ã¯ãã¯ãªããžã§ã¯ããæã€(ã³ã³ããžã·ã§ã³)
ãªããžã§ã¯ããšãªããžã§ã¯ãã¯é£æºãããšããããšãããã£ãŠããã ããããšæããŸãããã ãåé¡ã¯ãããã©ãå®çŸãããã§ãã
å®ã¯ãããã¯ãããåçŽãªè©±ã§ããªããžã§ã¯ãããªããžã§ã¯ããæãŠã°è§£æ±ºããŸããããšãã°èªåè»ãšããè€éãªè£œåãã€ã¡ãŒãžããŠãã ãããè»ã¯æ°äžä»¥äžã®ããŒãããæ§æãããŠãããã®ã®ããããã®ããŒãã¯ããåäœã«ãŸãšããããŠããŸãããããšãã°ãæ§æèŠçŽ ãšããŠããšã³ãžã³ã4ã€ã®ã¿ã€ã€ããã³ãã«ããããããŸãã
è»ãšãããªããžã§ã¯ããéå±ããŒãæ°ååãããžãæ°ååæã€ãšèããã®ã§ã¯ãªããè»ãšãããªããžã§ã¯ããããšã³ãžã³ãªããžã§ã¯ãã4ã€ã®ã¿ã€ã€ãªããžã§ã¯ãããã³ãã«ãªããžã§ã¯ããæã€ãšèããã®ã§ããããããããšã§ãè»ãšãããªããžã§ã¯ãã人ãçè§£ãããããªããèšèšãç°¡åã«ãªããŸãã
ãã®ããã«ããªããžã§ã¯ãããªããžã§ã¯ããæã€ãšããããšããã³ã³ããžã·ã§ã³ããšåŒã³ãŸããã³ã³ããžã·ã§ã³ã¯åœç¶ãªããäžéå±€ã§ã¯ãªããè€æ°ã®éå±€ã«ãªãå ŽåããããŸããããšãã°ãè»ãªããžã§ã¯ãã¯ã¿ã€ã€ãªããžã§ã¯ããæã¡ãã¿ã€ã€ãªããžã§ã¯ãã¯ãã¬ãŒããªããžã§ã¯ããæã€ãšããæ§æãèããããŸããããŸããè»ã«ããã»ã©è©³ãããªãã®ã§ééã£ãŠãããããããŸããã(ç¬)ã
ã³ã³ããžã·ã§ã³ã®å®çŸ
ããŠã話ãé·ããªã£ãŠããŸããŸããããå®éã«ã©ã®ããã«ããŠã³ã³ããžã·ã§ã³ãå®çŸãããã«ã€ããŠè©±ããŸãããããŠè©±ãããšã§ããªãã»ã©ç°¡åã§ããã
å ã»ã©ã®WebãµãŒãã¹ã®éçºã®ä»çµã¿ãç°¡åã«ããŠã以äžã®å³ã®ãããªãã®ãæ§ç¯ããŠã¿ãããšæããŸãã
èŠãŠãããããã«Managerãªããžã§ã¯ãã®BobããEngineerãªããžã§ã¯ãã®Tomã«äœæ¥ãäŸé Œãããšãããã®ã§ããå®éã«ã¯ããããªã話ã§ãããããäžåžã®Bobã¯ç®æ°ãã§ããªããããTomã«èšç®åŠçãäŸé Œãããšããã·ããªãªã§ã³ãŒããæžããŠã¿ãŸãã
class Manager:
def __init__(self):
self.tom = Engineer()
def work_a(self):
result = self.tom.add(5, 3)
print(result)
def work_b(self):
result = self.tom.add(8, 4)
print(result)
class Engineer:
def add(self, a, b):
return a + b
def multiply(self, a, b):
return a * b
bob = Manager()
bob.work_a()
# 8
bob.work_b()
# 12
泚ç®ããŠæ¬²ãããšããã¯2ç¹ãããŸããã²ãšã€ã¯Managerã¯ã©ã¹ãEngineerã®ã€ã³ã¹ã¿ã³ã¹ã§ããtomãæã£ãŠãããšããç¹ãManagerã®ã¡ãœãããèŠããšãtomã«ä»äºãäŸé ŒããŠããã®çµæãåŸãŠããããšãããããŸãããããã²ãšã€ã¯ãManagerã¯ã©ã¹ã¯èªåãå®çŸ©ãããŠããç®æããåŸåã«ããEngineerã¯ã©ã¹ãå©çšã§ããŠãããšããããšã§ããããšãã°ã
a = 5
print(a + b)
b = 5
ãšããããã°ã©ã ã¯2è¡ç®ã§ãšã©ãŒãšãªããŸãããå ã®ããã°ã©ã ã§ã¯ã3è¡ç®ã®'self.tom = Engineer()'ã§ãšã©ãŒãšãªããŸãããããã¯ãã®è¡ãPythonãèªã¿èŸŒãã éã«ã¯ãŸã å®è¡ãããŠãããããªããã€ææ³çã«ééãããªãããã§ããèšã£ãŠããŸãã°'self.tom = Engineer2()'ãšããååšããªãã¯ã©ã¹ãåç §ããŠããŠããšã©ãŒã«ãªãããå®è¡æã«ãšã©ãŒãšãªããŸãã
ã©ãã§ããã¯ã©ã¹ãå¥ã®ã¯ã©ã¹ãæã¡ããããå©çšãããšããã®ã¯ããã»ã©é£ãããªãã§ããããããã¡ãã£ãšããã°ã©ã ãè€éã«ããŠãªããžã§ã¯ãæåã®ã¡ãªãããåŸãŠã¿ãããšæããŸãã
ãã®ç¡èœãªãããŒãžã£ãŒBobã¯ä»äºã管çã§ããŠããããã©ã®ãããªããšãäŒè°ã§è©±ããŠããããŸã£ããèŠããããªããšããŸããããããã§åªç§ãªç§æžSaraã«ãã°ãåã£ãŠãããããšã«ããŸããã
ãããããã°ã©ã ã§å®çŸããŠã¿ãŸãããã®ç§æžã¯ç®æ°ããããšã³ãžãã¢ããåªç§ã§è€éãªã®ã§ãä»åã¯ã¢ãžã¥ãŒã«ã«åããŠã³ãŒããæŽçããŸãã
ãŸããç§æžã®Secretaryã¯ã©ã¹ã§ããsecretary.pyã«æžãããŠããŸãã
import time
class Secretary:
def __init__(self):
self.log = []
def write_log(self, text):
self.log.append(time.ctime() + ': ' + text)
def get_log(self):
return '\n'.join(self.log)
ã³ãŒããèŠãŠããããšããããŸãããlistã«ãã°ãæéä»ãã§ä¿åããŠããããã°ãååŸããéã¯ãããæ¹è¡ã³ãŒãã§çµåããŠstringãšããŠè¿ããŠããŸãã
次ã«äžåžã®Managerã¯ã©ã¹ãå®çŸ©ããå ã»ã©ã®Engineerãšåãããã«Secretaryã¯ã©ã¹ãå©çšããŠã¿ãŸãã
import time
from secretary import *
class Manager:
def __init__(self):
self.sara = Secretary()
def work_a(self):
self.sara.write_log('hello')
time.sleep(5)
self.sara.write_log('hey')
def work_b(self):
print(self.sara.get_log())
bob = Manager()
bob.work_a()
bob.work_b()
# Wed Oct 14 21:33:01 2015: hello
# Wed Oct 14 21:33:06 2015: hey
å®è¡ãããšãäžåžã®çºèšãã°ãæéä»ãã§åŸãããŠããŸãããããã»ã©é£ãããªããšæããŸãã
ã¯ã©ã¹åãã«ããå®è£ ã®ã·ã³ãã«å
ããŠãå ã«æ±ã£ãEngineerãšSecretaryã®äŸãªã®ã§ãããéåžžã«ç°¡åãªãã®ã®å®ã¯ããªãäžè¬çãªäœ¿ãæ¹ãšãªããŸãã
ãŸãEngineerã®äŸã¯ãç¹å®ã®è€éãªåŠçãAPIã®ããã«ããŠæäŸããŠããããšãããããŸãããã ãåŠçã®äž»å°æš©èªäœã¯Managerã«ãããEngineerã¯100%ãManagerãæããŸãŸã«åããŸããæ£çŽãªãšããããã®ãããªäœ¿ãæ¹ã®å Žåã¯ã¢ãžã¥ãŒã«ãšããŠç¬ç«ãããŠãå¿ èŠãªåŠçãåãªã颿°ãšããŠå®çŸ©ããã»ãããããããããŸããããããããã€ã³ã¹ã¿ã³ã¹ãäœãã¡ãªãããããŸããããŸããã
次ã«Secretaryã§ãããããã¯éåžžã«ãªããžã§ã¯ãæåã®ææ³ã«ãã£ãè¯ãäœ¿ãæ¹ã§ããå ã»ã©ã®Engineerã®äŸãšéã£ãŠããã¡ãã¯å éšã«ãä»ãŸã§ã®ãã°ããšãããç¶æ ããæã£ãŠããããšãããããŸããæ¬æ¥ã¯Managerã¯ã©ã¹ãäœãäœæã«èšã£ããèŠããŠããªããã°ãããªããã®ãããã®äœæ¥ããã¹ãŠSecretaryã«è©ä»£ããããŠããã£ãŠããŸããSecretaryãç¶æ ãæã€ãšããããšã¯ã100%ãããŒãžã£ãŒã®æãã©ããã«ãªããšã¯éããªããšããããšã§ãããå°ãªããšããããããããšãã¹ãŠãããŒãžã£ãŒã«ããããããã¯ãå°ä»»ã®äºº(ã¯ã©ã¹)ã«ãããããããã»ããééãã¯å°ãªãã§ãããã
ã€ãŸãã¯ã©ã¹ã䜿ãããšã§ãç¹å®ã®è€éãªåŠçãç°¡åã«åŒã³åºãããã«ããããããç¹å®ã®åŠçã®è€éãªç¶æ 管çãã·ã³ãã«ã«ç®¡çã§ããããã«ãªããšãããŸããã¯ã©ã¹ã䜿ããªãå Žåãšäœ¿ãå Žåã®æ¯èŒå³ã以äžã«èšããŸãã
ã¯ã©ã¹åãã«ããã³ãŒãã®åå©çš
ã¯ã©ã¹åããããããšã«ããå®è£ ãã·ã³ãã«ã«ãªããšãã話ãããŸããããããã¯ã³ãŒããåå©çšããéã«ãéèŠãªããšã§ãã
å ã»ã©ã®Secretaryã¯ã©ã¹ã®Saraã§ãããManagerã®Bobã®äžåžã§ããDirectorã®Johnãã俺ããã°æ©èœã䜿ãããããšæã£ããšããŸããä»®ã«ãã°ã®æ©èœãSecretaryã«å®è£ ããã«ãçŽæ¥Managerã¯ã©ã¹ã«å®è£ ããŠããŸã£ããšããããDirectorã«Managerã®ãã°æ©èœããã³ããŒ&ããŒã¹ããã§å®è£ ããããšã«ãªããšæããŸãã
äžæ¹ããã¡ããš Secretaryã¯ã©ã¹ãšããŠæ©èœãåããããŠããã°ãDirectorã¯ã©ã¹ãManagerã¯ã©ã¹ãšåæ§ã«ãSecretaryã¯ã©ã¹ãå éšã«æã€ããšã§ããã°æ©èœãç°¡åã«äœ¿ããããã«ãªããŸããã³ããã«æ¯ã¹ããšéåãšãšã¬ã¬ã³ãã§ãããä»®ã«ãã°æ©èœã«ãã°ãèŠã€ãã£ããšããŠãä¿®æ£ã¯äžç®æã§æžã¿ãŸãã
å人çãªèãã§ãããäžè¬çã«èªåãèšèšããã¯ã©ã¹ã¯2çš®é¡ãããšèããŠããŸãã
- ã¢ããªããµãŒãã¹ã®ã¢ãŒããã¯ãã£ãäœãã¯ã©ã¹
- äžèšã¯ã©ã¹ãå©çšããæ±çšåŠçã®ã¯ã©ã¹
ã¯ã£ããèšããšããã¹ãŠæ±çšã¯ã©ã¹ãšããããšã¯ã©ã€ãã©ãªã®éçºä»¥å€ã¯äžå¯èœã§ããç¬èªã®æ©èœã¯äžç®æã§ãã䜿ããããããã¯ããªããéçºããã¢ããªããµãŒãã¹ã ç¹åŸŽä»ãããã®ã§ãããã ããã¹ãŠãã®ãããªç¬èªæ©èœã®ã¯ã©ã¹ã«å®è£ ãå®çŸ©ããŠããŸããšã³ãŒããè€éã«ãªããã¡ã³ããã³ã¹ã倧å€ã«ãªããŸãã
ããã§ç¬èªæ©èœãå®çŸããããã«ãã©ã®ãããªæ±çšåŠçãå¿ èŠãããããèããŠããããåãåºããŠã¯ã©ã¹ãšããŠå®çŸ©ããŠããããèªåã®ç¬èªæ©èœã¯å¯èœãªéããæšæºã©ã€ãã©ãªãèªåãäœã£ãæ±çšã¯ã©ã¹ã䜿ããªããã·ã³ãã«ãªã³ãŒãã§å®çŸãããããããããšã§ç¬èªæ§ãæããã€ã€ããªããã€çè§£ããããã³ãŒããäœããã®ã§ã¯ãªãããšæã£ãŠããŸãã
詳现ãªå®è£ ã®é èœ
ä»ãŸã§äœåºŠã話ããŠããå®è£ ã®é èœã§ãããã¯ã©ã¹ã䜿ããšãã®ã¡ãªãããããããããã®ã§å床åãæ±ããŸãã
å ã»ã©ã®ã¯ã©ã¹Secretaryã§ãããã²ãšã€åé¡ããããŸããããã¯ããã°ã©ã ãçµäºãããšããŒã¿ããã¹ãŠå€±ã£ãŠããŸãããšã§ãããã®åé¡ã解決ããããšããŸãããã
ä»®ã«ãã®æ©èœãSecretaryã¯ã©ã¹ã§ã¯ãªããããã°ã©ã ã®äž»åœ¹ã§ããManagerã¯ã©ã¹ã«å®è£ ããŠãããšãããšãã³ãŒãã®ä¿®æ£ã¯ã¡ã€ã³ãšãªãã¯ã©ã¹ãããããªããã°ãªããªããªããŸããã¡ã€ã³ãšãªãã¯ã©ã¹ã¯äžè¬çã«è€éã§ããªããã€ãããããªãã®ãå©çšããŠããããããã¹ããªã©ããã«ãããã®ã§ããæ£çŽãªãšããããã°ã®æ¹åŒã®å€æŽçšåºŠã§ã¡ã€ã³ãšãªãã¯ã©ã¹ããããã®ã¯é¢åãããããªããã€ãã°ãçããšãããªã¹ã¯ãé«ãŸããŸãã
ãã ããã¡ããšSecretaryã¯ã©ã¹ãšããŠãã°æ©èœãå®è£ ãããŠãããšãã¡ã€ã³ãšãªãManagerã¯ã©ã¹ãããããã«ãSecretaryã¯ã©ã¹ã®ã¿ã倿Žããã ãã§æ©èœãã¢ããããŒãããããšãã§ããŸãã
詊ãã«ããã°ã©ã çµäºæã«ããŒã¿ã倱ããšããåé¡ç¹ãåé¿ããä¿®æ£ãå ããŠã¿ãŸããããã«ã¯ä»¥åã話ããPickleãšããæ©èœã䜿ã£ãŠã¿ãŸãã
import time, os.path, pickle
class Secretary:
def __init__(self):
self.logfile = '_log.dump'
if(os.path.exists(self.logfile)):
f = open(self.logfile, 'r')
self.log = pickle.load(f)
f.close()
else:
self.log = []
def write_log(self, text):
self.log.append(time.ctime() + ': ' + text)
f = open(self.logfile, 'w')
pickle.dump(self.log, f)
f.close()
def get_log(self):
return '\n'.join(self.log)
ã³ãŒããèªãã§ããããšããããŸãããã³ã³ã¹ãã©ã¯ã¿ã§ä»¥åã®ããŒã¿ãæ ŒçŽãããã³ããã¡ã€ã«ãããã確èªããããã°ãããèªã¿èŸŒã¿ããªããã°æ°ããããŒã¿ãäœæããŠããŸãããããŠwrite_logã§å€æŽããããã³ã«ãã³ããã¡ã€ã«ãæžãåºããŠããŸãã
ãããå©çšããManagerã¯ã©ã¹ã以äžã«èšèŒããŸãã
import time
from secretary import *
class Manager:
def __init__(self):
self.sara = Secretary()
def work_a(self):
self.sara.write_log('hello')
time.sleep(5)
self.sara.write_log('hey')
def work_b(self):
print(self.sara.get_log())
bob = Manager()
bob.work_a()
bob.work_b()
å ã«æžããManagerã¯ã©ã¹ãšèŠæ¯ã¹ãŠã¿ãŠãã ãããäžè¡ãå€ãã£ãŠããªãã§ãããããã¯ææãã§ã¯ãªãããããŠããããŠããŸã(ç¬)ãããã°ã©ã ã®ã¡ã€ã³ãšãªãManagerã®ã³ãŒããäžå倿Žããã«ããã°æ©èœã®ã¢ããããŒããè¡ã£ãŠããŸãã
詊ãã«ã³ãŒããåãããŠã¿ãŸããäžåºŠç®ã®å®è¡ã¯ã
Thu Oct 15 07:33:43 2015: hello
Thu Oct 15 07:33:48 2015: hey
ãšãªããŸããããããŠäºåºŠç®ã®å®è¡ã¯ã
Thu Oct 15 07:33:43 2015: hello
Thu Oct 15 07:33:48 2015: hey
Thu Oct 15 07:34:18 2015: hello
Thu Oct 15 07:34:23 2015: hey
ãšãªã£ãŠããŸãããã°ãæ®ããšããç®çãæãããŠããããšãããããŸããããã®ããã«é©åã«æ©èœãã¯ã©ã¹åããããŠãããšãã³ãŒãã®ä¿®æ£ç¯å²ãçããªããæ©èœæ¡åŒµã倿ŽããããŠãã°æœ°ããæ¥œã«ãªããŸãã倧åãªããšãªã®ã§èŠããŠãããŠãã ãããã
æ å ±ã®é èœã«ãããšãã¹ããŒãã®åæ¥
æ å ±ãé èœããã¡ãªããã¯ãäœãä¿®æ£ãæ¹è¯ã ãã§ã¯ãããŸããã話ãè»ã®éçºã«æ»ããŸãããã
è»ãç»å Žãã¯ãããåœæã¯ãããããè»ã®ãã¹ãŠã®ããŒãã«å¯ŸããŠéçºè ãçç¥ããŠããå¿ èŠããã£ãã¯ãã§ãããã ããã®ãããªããšã¯ã©ãã©ãè€éã«ãªã£ãŠããŠããçŸåšã®è»ã§ã¯ã§ããªãã¯ãã§ããåèªåè»ã¡ãŒã«ãŒã«ã¯ãšã³ãžã³ã®å°éå®¶ããã¬ãŒã éçºã®å°éå®¶ããã¬ãŒãã®å°éå®¶ãšãã£ãããã«ããç¹å®ã®ããŒãã«ç¹åããå°éå®¶ã倿°ããããŠããŠãããããã®å°éå®¶ã¯ãèªåã®ç¯å²å€ã®åéã«ã€ããŠãæ·±ãç¥èã¯ããã»ã©å¿ èŠãšããŸãããããšãã°ãã¬ãŒãã®å°éå®¶ã¯ããšã³ãžã³ã®çãšãåæ¹åŒã«ã€ããŠã¯ãç¥ãå¿ èŠã¯ãªãã§ããããäžæ¹ãè»ã®å šäœèšèšããããšã³ãžãã¢ã¯ãåããŒããçµã¿åãããŠè»ãäœã£ãããæ°ããè»ãäœãããã«å¿ èŠãªèŠä»¶ãå°éå®¶ã«äŒããã°ããã ãã§ãã
ãªããžã§ã¯ãæåããããšåãããšãèšããŸããåãªããžã§ã¯ããäœã£ãŠãã人ãã¡ã¯ãèªåãäœããªããžã§ã¯ã(ã¯ã©ã¹)ãã«ã€ããŠã¯æ·±ãçè§£ããå¿ èŠããããã®ã®ããèªåãå©çšãããªããžã§ã¯ããã«ã€ããŠã¯ã©ã䜿ãã°ãããã ãç¥ã£ãŠããã°ããã®ã§ãã
ããè€éãªã¢ããã·ã¹ãã ãããããåè§£ããŠããã°å°ããªåäœã«åããããšãã§ããã¯ãã§ããè€éãªãã®ãã©ã®ããã«èªç¶ãªå®çŸããããã³ã³ããŒãã³ãåäœã«ãŸãšããããããã°ã©ãã®ã¹ãã«ã¯ã现ããåŠçãããã«ããŠå®çŸãããããšããããšã ãã§ã¯ãªãããå šäœåãæããããã«æé©ãªè«ççãªæ§é ãäœããããšããå Žé¢ã§ãå¿ èŠãšãããŸãã
æ£ããèšèšãã·ã¹ãã ããµãŒãã¹ã®æ§ç¯ã«ã¯å¿ é ã§ããããããã³ãŒããæžããŠãèšèšã«å€±æããŠãä¿®æ£ããŠããããã£ãããšãç¹°ãè¿ããŠãããšèªç¶ãšæ£ããèšèšãã§ããããã«ãªãã®ã§ã¯ãªãã§ããããããã¶ã€ã³ãã¿ãŒã³ãšããééæžãèªãã®ããŠã£ãšãæ©ãã®ã§ãããããçšåºŠã®çµéšããªããšèªåã®è¡èã«ã¯ãªããªãã§ãã
ã©ããã£ãŠãªããžã§ã¯ããããããã
ããŠãå°ã åçŽã¬ãã«ãéžè±ãã¯ãããŠããã®ã§ãããããããä»åã®æåŸã®ããŒãã«ç§»ããããšæããŸããããã¯ãã€ã³ã¹ã¿ã³ã¹ã«ã©ããã£ãŠãªããžã§ã¯ããæããããããšããå 容ã§ãã
ä»ãŸã§ã®ManagerãEngineerãSecretaryã®äŸãèŠãŠããããšãããã®ã§ãããåžžã«ãAãBãæã€ããšãã圢ã§ããã°ã©ã ãå®çŸãããŠããŸããããã®ãããManagerå ã§EngineerãSecretaryã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠä¿æããã°ããã ãã§ããã
ãã ãäžã®äž(ããã°ã©ã )ã¯ãããªã«åçŽãããããŸãããããšãã°ä»¥äžã®ã·ããªãªãèããŠãã ããã
ç§æžSecretaryã¯ã©ã¹ã®Saraã¯æé²ããã®ã§ããã°åããšããæ¥åã§ã¯ãªãã客ããã®ã¢ãã€ã³ãã¡ã³ãã®ç®¡çããããšããä»äºãæ°ãã«ããããšã«ãªããŸããããã®æ¥åã¯ä»¥äžã®å³ã®ããã«ãªããŸãã
Managerã¯ã©ã¹ã®BobãSaraã«ã¢ãã€ã³ãã確èªããã®ã¯ç°¡åã§ããä»ãŸã§ã©ãããèªåãæã€Saraãªããžã§ã¯ãã®ã¡ãœãããåŒã³åºãã ãã§ãããã ãåé¡ãšãªãã®ã¯ã客ãSaraã«ã©ããã£ãŠã¢ãã€ã³ãã¡ã³ããåãããã§ãããªãããSaraã¯Bobãæã£ãŠããã客ã¯Saraãæã£ãŠããªãã®ã§ãããã
ãããå®çŸããæ¹æ³ã¯ããŸããŸã§ãããå ±éããŠèšããããšã¯ãBobãæã€Saraãšããã€ã³ã¹ã¿ã³ã¹ãå®¢ã«æž¡ãå¿ èŠãããããšããããšã§ããèªåã§äœãã®ã§ã¯ãªããæž¡ãããšã§Saraãšããã€ã³ã¹ã¿ã³ã¹ãBobãšã¯ã©ã€ã¢ã³ãã®ã€ã³ã¹ã¿ã³ã¹ãå ±æããŸãã
ãããã³ãŒãã§å®çŸããŠã¿ãŸãããŸãæåã«ãç§æžã®Secretaryã¯ã©ã¹ã§ããæé管çã¯ä»åã®æ¬è³ªã§ã¯ãªãã®ã§ãèŸæžåã䜿ã£ãŠ "æé:誰" ãšãã圢ã§ã¢ãã€ã³ãã管çãããŠããŸããåãæéãæå®ããããšãã ãFalse(ã¢ãã€ã³ããåããªã)ãè¿ããŠãããã§ãªããã°True(ã¢ãã€ã³ããåãã)ãè¿ããŸãã
class Secretary:
def __init__(self):
self.appointment = {}
def request_appointment(self, when, who):
if(when in self.appointment):
return False
else:
self.appointment[when] = who
return True
def get_schedule(self):
return str(self.appointment)
次ã«ManagerãšClientããããŠå®è¡ã³ãŒãã§ããManagerã¯ã¢ãã€ã³ãã®ç¢ºèªæ©èœãã¯ã©ã€ã¢ã³ãã¯ã¢ãã€ã³ããåãæ©èœãå®è£ ãããŠããŸãã
from secretary import *
class Manager:
def __init__(self):
self.sara = Secretary()
def check_schedule(self):
schedule = self.sara.get_schedule()
print(schedule)
def get_secretary(self):
return self.sara
class Client:
def __init__(self, name):
self.name = name
self.contact_point = None
def set_contact_point(self, contact_point):
self.contact_point = contact_point
def make_appointment(self, when):
if(self.contact_point):
is_success = self.contact_point.request_appointment(when, self.name)
print(self.name + " could book? : " + str(is_success))
bob = Manager()
adam = Client('adam')
adam.set_contact_point(bob.get_secretary())
adam.make_appointment('10:30')
charles = Client('charles')
charles.set_contact_point(bob.get_secretary())
charles.make_appointment('11:30')
dag = Client('dag')
dag.set_contact_point(bob.get_secretary())
dag.make_appointment('10:30')
bob.check_schedule()
å°ãé·ãã§ãããå®è¡ããããšä»¥äžã®ããã«ãã¡ããšåããŠããããšãããããŸãã
adam could book? : True
charles could book? : True
dag could book? : False
{'11:30': 'charles', '10:30': 'adam'}
泚ç®ããŠã»ããããšã¯ãClientã®ã€ã³ã¹ã¿ã³ã¹ããManagerã®æã€Secretaryã®ã€ã³ã¹ã¿ã³ã¹ãååŸããŠããããšã§ãããã®ããã«ããããšã§ãç¹å®ã®ã€ã³ã¹ã¿ã³ã¹ãè€æ°ã®ç°ãªãã€ã³ã¹ã¿ã³ã¹éã§å ±æããããšãã§ãããã®å ±æãããã€ã³ã¹ã¿ã³ã¹ãä»ããŠãããšãããããšãå¯èœã§ãã
ä»åã¯Managerã«get_secretaryãClientã«set_contact_pointãšããã¡ãœãããå®è£ ããŠãããšãããŠããŸãããã ãã€ã³ã¹ã¿ã³ã¹ã®åãæž¡ãã®æ¹æ³ã¯ããã ãã§ã¯ãªããã±ã£ãšæãã€ãã ãã§ã以äžã®æ¹æ³ããããŸãã
- ã³ã³ã¹ãã©ã¯ã¿ã§ã€ã³ã¹ã¿ã³ã¹ãæž¡ã
- getãsetã§æž¡ã(ä»åã®äŸ)
- ã€ã³ã¹ã¿ã³ã¹ã®åãæž¡ãå°éã®ã¯ã©ã¹ãäœã
- ã°ããŒãã«ç©ºéã§å ±æãã
ããããã¯ããŸããŸã§ãããããããã«ã¡ãªããã»ãã¡ãªãããããã®ã§ç¶æ³ã«å¿ããŠäœ¿ãåããå¿ èŠããããŸãããŸããããã«é¢ããŠã¯äžæŠçãªææ³ã¯ãªãã®ã§ããããããã£ãŠã¿ãŠãã ããã
ä»åã§ãªããžã§ã¯ãæåã®ååæŠã¯çµäºã§ããæ¬¡åã¯ä»ãŸã§ã®åŸ©ç¿ãå ŒããŠç°¡åãªã²ãŒã äœããããŠã¿ãããšæããŸãã





