ã¡ãªã¿ã«ããã¹ã¿ãŒåãã®ã€ãã³ãã«åå ã§ããªãå Žåã¯ã11æ30æ¥ïŒåïŒ11:00ã«æŸéãå§ãŸããŸãã
ãã®èšäºã¯ãYandexãã£ã¹ãã¬ã€åºåã·ã¹ãã ã®ãã¹ããèªååããããã»ã¹ã§ãåæãã¹ãããŒã¿ã®è€éãªã»ãããæºåããåé¡ã解決ããçµéšã«åºã¥ããŠããŸãã ãã¡ããããã®ãããªã¿ã¹ã¯ã«æåã«ééããããã§ã¯ãããŸããããã®ããããŸããæ¢åã®ã¢ãããŒããšãœãªã¥ãŒã·ã§ã³ãåæããŸããã ãã®çµæããœãªã¥ãŒã·ã§ã³ã¯ObjectBuildersã©ã€ãã©ãªïŒPythonïŒã§ãããéå±€çã«é¢é£ããããŒã¿ã»ãããäœæããå¿ èŠããããããžã§ã¯ãã§äœ¿çšã§ããŸãã ãããã®é¢ä¿ããã©ã¡ãŒã¿ãŒãããã³ããããã£ãèšå®ã§ããŸãã ãŸããå¯äœçšãšããŠããã€ãã®ããŒãã¹ãæäŸããŸãã
以äžã§ã¯ããã®ããŒã«ã®æäœãããããããäŸã§èª¬æãã衚瀺ããããšããŸãããæåã«ã解決ããããšããŠããåé¡ãšãã®è§£æ±ºçã®å¯èœæ§ã«ã€ããŠè©³ãã説æããŸãã
ç®çïŒãã£ã¹ãã¬ã€åºåã·ã¹ãã ããã¹ãããå¿ èŠããããŸãã
ãããã£ãŠãããã¹ãã®ããã«ãå€å¯Ÿå€ãå€å¯Ÿ1ã1察å€ã1察1ãããã³10ã®ããããã«ãã£ãŠçžäºæ¥ç¶ããã30ïŒ50ã100 ...ïŒãªããžã§ã¯ããã·ã¹ãã ã«äœæããå¿ èŠãããå Žåã®å¯ŸåŠæ¹æ³20ã40 ...ïŒããããã®ããããã£ïŒ ''
ããã§ãããã«äºçŽãè¡ããŸããããã¯ãæ©èœçãªãã©ãã¯ããã¯ã¹ãã¹ãã確ç«ããããšã§ã-åäœãã¹ããŸãã¯ããŒããªãã
ããã§ãã©ã®ããã«ããã解決ããŸããã OK ã©ã®ãããªã·ã¹ãã ããããŸããïŒ ãããåºåãã£ã³ããŒã³ã«é¢ããããŒã¿ãå«ãããŒã¿ããŒã¹ãåºåã³ã³ãã¹ããå®æœããŠçµ±èšãã«ãŠã³ãããããã®ããã¯ãšã³ããhttpãªã¯ãšã¹ããåãå ¥ããç¹å®ã®åœ¢åŒã§åçãæäŸããããã³ããšã³ãã
ããšãã°ãã€ã³ãã©ã¹ãã©ã¯ãã£ãæ§ç¯ããã¹ã¿ã³ããç«ã¡äžããCIãã»ããã¢ãããããã¹ããPythonã§èšè¿°ããã°ããã¹ãŠããŸããããŸãïŒ Python以æ¥ããã¹ãã«ã¯PyTestãéžæããŸãã䟿å©ã§çŸããJUnit圢åŒã®ã¬ããŒãããã©ã°ã€ã³ã®åœ¢ã§æ©èœãç°¡åã«æ¡åŒµã§ããŸãã ããã ãã§ãããã¹ããæžãããšãã§ããŸãïŒ çŸå®ã«ã¯ããã¡ãããæ°å¹Žã§äžèšã®ãã¹ãŠãåããŸããããä»ã¯ããã«ã€ããŠè©±ããŠããŸããã
ãã¹ãŠãç°¡åãªããã§ãïŒããŸããŸãªãã©ã¡ãŒã¿ãŒã§1ã€ãŸãã¯è€æ°ã®åºåãã£ã³ããŒã³ãéå§ããã·ã¹ãã ãèµ·åããhttpãªã¯ãšã¹ãããã«ããå¿çãåä¿¡ããæåŸ ã©ããã«åŸ æ©ããŠããããšã確èªãããããããã°ãçµ±èšãªã©ã®ããã€ãã®å¯æ¬¡çãªããšããã§ãã¯ããŸããdã
ã·ã¹ãã ã«å°ãªããšã1ã€ã®ãããŒã衚瀺ãããããšããŠã
ããããçµå±ã®ãšãããåãã¹ãã§ã¯ãããŸããŸãªåºåãã£ã³ããŒã³ãããã«ã¯ããã€ãã®ãããã«ã¯ããŸããŸãªèšå®ãå¿ èŠã§ãã
ãããŠãããã¯ç§ãã¡ããããããŠããããã§ãã ããããããªãã¯äœããããå¿ èŠããããŸãã
èããŠãäœææé ãšãã¹ãããŒã¿èªäœã®èŠä»¶ã®æ¬¡ã®ãªã¹ããäœæããŸããã
- äœæãããããŒã¿ã¯ãã·ã¹ãã ã®æ£ããåäœãä¿èšŒããå¿ èŠããããŸãã
- æ¥ç¶ã®ããžãã¯ãŸãã¯ãªããžã§ã¯ãã®ãã©ã¡ãŒã¿ãŒãå€æŽãããšãïŒããšãã°ãæ°ããæ©èœãéçºãããšãïŒããããã®ãªããžã§ã¯ãã䜿çšããŠãã¹ãŠã®ãã¹ããç°¡åãã€è¿ éã«ä¿®æ£ã§ããå¿ èŠããããŸãã å°æ¥çã«ã¯è»œããã¹ãã®ãµããŒããå¿ èŠã§ãã
- ãããã¹ãã®ããŒã¿ãå¥ã®ãã¹ãã®åäœã«åœ±é¿ãäžããããšã¯ãããŸããã
- ãã¹ããæ°ååèµ·åããããšãã§ããã¯ãã§ãã ãããã£ãŠãããŒã¿ã¯æ¯åå ã®ç¶æ ã«æ»ãããåçæããå¿ èŠããããŸãã
- ãã®ããŒã¿ã®èª¬æãããããããä»ã®ãã¹ãŠã®ã±ãŒã¹ãšã©ã®ããã«æ£ç¢ºã«ç°ãªãã®ãããªããã®ãã¹ãã«ãã®ãããªèšå®ãå¿ èŠãªã®ããç解ã§ããã¯ãã§ãã
ãœãªã¥ãŒã·ã§ã³ãªãã·ã§ã³
å®çšŒåã·ã¹ãã ããæ¢åã®ããŒã¿ãååŸããããšã¯ã§ããŸããã
- ãããã¯å€åããå¯èœæ§ãããããã¹ãã¯äºæããåäœããŸãã ãããã®å€æŽã«æ°ä»ãããšã¯å°é£ã§ãïŒãã¹ãã¯åŒãç¶ãæ©èœããŸãããå¿ èŠãªãã®ã¯ãã§ãã¯ããŸããïŒã
- ãããã¯æ¶ãããããããŸãã-ãã¹ãã¯å®å šã«åäœãåæ¢ããŸãã
- 1ã€ã®ãã¹ãã§å¥ã®ãã¹ãã§äœ¿çšãããããŒã¿ãå€æŽã§ããŸã
- äžè¬ã«ãåãã¹ãã§äœãã©ã®ããã«äœ¿çšããããã¯æ確ã§ã¯ãããŸãã
- ãã®ãœãªã¥ãŒã·ã§ã³ã®å¯äžã®å©ç¹ã¯ãããŒã¿ãå®éã«æºåããããã®ã³ã¹ãããªãããšã§ãã
ç¹å®ã®ãã¹ãããšã«äºåã«ããŒã¿ãå«ãããŒã¿ããŒã¹ãæºåãããªãã·ã§ã³ãé©åã§ã¯ãããŸããã
é£ããïŒãã©ã¡ãŒã¿ãŒãšãªããžã§ã¯ããå€ããã
- ããŒã¿ãäœæãããšãã«ç°¡åã«ééããç¯ãå¯èœæ§ãããããããããšãšã©ãŒãèŠã€ããã®ãé£ãããªããŸãã
- ç¹å®ã®ããŒã¿ã»ããã®ã©ã®ãã©ã¡ãŒã¿ãŒããã¹ãã®åäœã«åœ±é¿ããããæ£ç¢ºã«ç解ããããšã¯å°é£ã§ãïŒãã¹ããäœãããªããã§ãã¯ããã®ããç解ããããšã¯å°é£ã§ãïŒ
- ãã¹ããåéããããšã¯ã§ããŸãã-å ã®ããŒã¿ã»ããã®ãã©ã¡ãŒã¿ãŒãå€æŽã§ããŸããéå§ãããã³ã«ããŒã¿ããªããŒãããå¿ èŠããããŸãã
- ãã¹ãããã補åã®ããžãã¯ãå€æŽããå Žåãå€æŽã«ãã£ãŠåœ±é¿ãåããåãªããžã§ã¯ãã¯ç°ãªããã¹ãã§çºçããå¯èœæ§ããããããæåã§å€æŽããå¿ èŠããããŸãã
- ãªãã·ã§ã³1ãšæ¯èŒãããšããã®ãœãªã¥ãŒã·ã§ã³ã«ã¯1ã€ã®å©ç¹ããããŸãããã¹ããäºãã«åœ±é¿ããªãããã«ãç¬ç«ããããŒã¿ãæºåã§ããŸãã
ãããã®ãªãã·ã§ã³ã¯ã»ãšãã©ã®èŠä»¶ã«éåããŠãããããããã«æåŠããŸããã Builderãã¿ãŒã³ã䜿çšããããšããå§ãããŸãã ãã®é·æãšçæããã詳现ã«æ€èšããŠãã ããã
ãã«ããŒãã¿ãŒã³ããŸãã¯ãªãããããŸã 䜿çšããªãã£ãã®ã
Builderã¯ããªããžã§ã¯ãã®æ§ç¯ãšãã¬ãŒã³ããŒã·ã§ã³ãåé¢ã§ãããã¶ã€ã³ãã³ãã¬ãŒãã§ãã 詳现ã¯èª¬æããŸããã 圌ã®äž»ãªã¢ã€ãã¢ã¯ãçŽæçãªã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠä»ã®ã¯ã©ã¹ã®ãªããžã§ã¯ããäœæã§ããã¯ã©ã¹ãäœæããããšã ãã ãšèšããŸãã ãããã£ãŠããã«ããŒã¯ãªããžã§ã¯ãã®äœæãšæ§æã®ããžãã¯å šäœãã«ãã»ã«åããŸãã
Wikiã®äŸããããã®ã¢ãããŒãããã¹ãŠã®èŠä»¶ãæºãããŠããããšã¯æããã§ãã
- äœæãããããŒã¿ã¯ãã·ã¹ãã ã®æ£ããåäœãä¿èšŒããŸããïŒ ã¯ãããã«ããŒå ã®ãªããžã§ã¯ãã®æ§æã®ããžãã¯ãæ£ããèšè¿°ããããšã§ãäœæããããªããžã§ã¯ããæ£ããé¢ä¿ãšãã©ã¡ãŒã¿ãŒãæã£ãŠããããšã確èªã§ããŸã
- æ¥ç¶ã®ããžãã¯ãŸãã¯ãªããžã§ã¯ãã®ãã©ã¡ãŒã¿ãŒãå€æŽãããšãã«ããããã®ãªããžã§ã¯ãã䜿çšããŠãã¹ãŠã®ãã¹ããç°¡åãã€è¿ éã«å€æŽããããšã¯å¯èœã§ããïŒ ã¯ãããã«ããŒã§ãªããžã§ã¯ããäœæããããžãã¯ãã«ãã»ã«åãããŠããããããã®ããžãã¯ã¯1ãæã§ã®ã¿å€æŽã§ããŸããã€ãŸããå¥ã®ã¬ã€ã€ãŒã§éžæããŸãã
- 1ã€ã®ãã¹ãããã®ããŒã¿ã¯ãä»ã®ãã¹ãã®åäœã«åœ±é¿ããŸãããïŒ ã¯ãããã«ããŒã®å©ããåããŠãåãã¹ãã®éå§æã«ç¬èªã®ãªããžã§ã¯ãã»ãããçæããæ¢åã®ãªããžã§ã¯ãã䜿çšããªãããã§ãã
- ãã¹ããæ°ååéããããšã¯å¯èœã§ããïŒ ã¯ãããã«ããŒå ã§ãããšãã°äžæã®ååãŸãã¯IDãäžãããã³ã«ãäžæã®ãªããžã§ã¯ããäœæããããžãã¯ãå®è£ ã§ããŸãã
- ãããã®ããŒã¿ãèšè¿°ããŠãä»ã®ãã¹ãŠã®ã±ãŒã¹ãšã©ã®ããã«ç°ãªãã®ãããã®ãã¹ãã«ãã®ãããªèšå®ãæ£ç¢ºã«å¿ èŠãªçç±ãç解ããããšã¯å¯èœã§ããïŒ ããŒããã»ãšãã©ã äžéšã®ãªããžã§ã¯ãã®äœæã¯ããã«ããŒã䜿çšããŠäžé£ã®ã¡ãœãããåŒã³åºãããã«èŠããŸãã é©åãªããŒãã³ã°ã«ãããæ§æå 容ãçŽæçã«ç解ã§ããŸãã
ãããïŒ
ããã«ãBuilderã䜿çšããŠè€åãªããžã§ã¯ããäœæã§ããŸãã ã€ãŸããåäžã®è«çãªããžã§ã¯ããšããŠè§£éã§ããé¢é£ãªããžã§ã¯ãã®ã°ã©ãå šäœã çžäºã«ç°ãªãã¿ã€ãã®é¢ä¿ãæã€å€æ°ã®ãªããžã§ã¯ããäœæãããªããžã§ã¯ãã®ããªãŒå šäœãšãã®åã ã®ã³ã³ããŒãã³ãã®ãã©ã¡ãŒã¿ãŒãåäžã®æ¹æ³ã§æ§æããå¿ èŠããããŸãã
ãã¹ãŠãããŸãããããã«èŠããŸããããããã®ãã¿ãŒã³ã«ã¯æ¬ ç¹ããããŸãããªããžã§ã¯ãã®ã¿ã€ãããšã« ãç¬èªã®ãã«ããŒãšãå Žåã«ãã£ãŠã¯ç¬èªã®ã³ã³ããžãããåå¥ã®ã¯ã©ã¹ã®åœ¢åŒã§å®è£ ããå¿ èŠããããŸã ã ãŸããäœæãããªããžã§ã¯ãããããã®é¢ä¿ãããã³ããããã£ãå€æŽã§ããã¡ãœãããèšè¿°ããå¿ èŠããããŸãã
æ ãè ãªã®ã§ãBuilderãæ©èœãããããç°¡åã«å€æŽã§ããããšã«åºã¥ããŠãããŒã¿ã¢ãã«ãäœããã®åœ¢ã§æ£åŒã«èšè¿°ããããšã¯çŽ æŽãããããšã ãšèããŸããã
ãã®çµæãPythonã®ObjectBuilderãšåŒã°ããå°ããªã©ã€ãã©ãªãã§ããŸããã é¢é£ãããªããžã§ã¯ãã®ã°ã©ããäœæãããªããžã§ã¯ãèªäœã®é¢ä¿ãšããããã£ã管çãããããã®åœ¢ã§ããã©ã«ãèšå®ã«é©çšãããå€æŽãèšæ¶ããå°æ¥åå©çšã§ããŸãã
å°ãã®çè«ãšã¢ãããŒãã®èª¬æ
åè¿°ã®ããã«ããã¹ãã·ã¹ãã ã¯ãç¹å®ã®ãã©ã¡ãŒã¿ãŒã»ãããæã€çžäºæ¥ç¶ããããªããžã§ã¯ãã»ããã§åäœããŸãïŒãããã»ãšãã©ã®ã·ã¹ãã ã®åäœã§ãïŒã ãããã®ãªããžã§ã¯ããšãã®æ¥ç¶ã¯ãã°ã©ããŸãã¯ããªãŒã®åœ¢ã§è¡šãããšãã§ããŸãïŒé ç¹-ãªããžã§ã¯ãããšããž-ãªããžã§ã¯ãéã®æ¥ç¶ïŒã å®éãç§ãã¡ã®ã¿ã¹ã¯ã¯ãç¹å®ã®ãã¹ãããšã«ãªããžã§ã¯ããšãã®ãã©ã¡ãŒã¿ãŒã®ã°ã©ããäœæããããšã§ãã
ããã§æ¬¡ã®äºå®ã圹ç«ã¡ãŸãããã¹ããæ éã«èšè¿°ããåãã¹ãã§æ©èœã®ããäžéšã®ã¿ããã¹ããããšãã»ãšãã©ã®ãã¹ãã§ã°ã©ãããã¹ã察象ã®ãã©ã¡ãŒã¿ãŒ/ãªã³ã¯ã«äžèŽããŸãã
ããã«ããã¹ãã§ã¯ããã®åäœã«åœ±é¿ãããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã®å€ãåžžã«èšå®ããå¿ èŠããããŸããä»ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯æ°ã«ããŸãã-äž»ãªããšã¯ããããæ©èœããããšã§ãã ããã§ã¯ãªãããŸã 圱é¿ãäžãããã©ã¡ãŒã¿ãŒãããå Žåã¯ãåã®æ®µèœãåç §ããŠãã ãã-ããããèšå®ããå¿ èŠããããŸãïŒ ãã¹ãã§äžåºŠã«å€ãã®æ©èœããã§ãã¯ããå Žåãå€ãã®åœ±é¿åã®ãããã©ã¡ãŒã¿ãŒããããŸãããç¹å®ã®æ©èœããã¹ãããå Žåã¯ååã§ã¯ãããŸããã
ããã¯ãæãäžè¬çã«äœ¿çšãããã°ã©ããã³ãã¬ãŒããšãã©ã¡ãŒã¿ãŒã®äžéšãäºåã«ä¿®æ£ããåãã¹ãã§å°ãã ããããããïŒãããïŒã§ããããšãæå³ããŸãã
ããã«ãæ§æã«é¢ããç¥èãèç©ããããŸããŸãªçµã¿åããã§ã°ã©ãã®ããããããåå©çšããããšã¯çŽ æŽãããããšã§ãã ã·ã¹ãã ã«é¢ããç¥èãèç©ããŸããããã«ãããå°æ¥ïŒå¿ãã人ãŸãã¯ç¥ããªãã£ã人ïŒãå ¥åæã«ã·ã¹ãã ã«æäŸãããããŒã¿ã䜿çšããŠã·ã¹ãã ãã©ã®ããã«åäœããããç解ã§ããããã«ãªããŸãã
å®éãBuilderãã¿ãŒã³ããè£è¿ããã«ããããšã決å®ããç¹å®ã®ãªããžã§ã¯ãã®äœæã§ã¯ãªãããããããã®æ¥ç¶ãããã°ã©ãã®åŸç¶ã®æ§ç¯ãèšè¿°ãå§ããŸãããããã®ã°ã©ããšãã®é ç¹ããã³æ¥ç¶ã«å€æŽãé©çšããŠããªããžã§ã¯ãã®ã°ã©ãã®æ§ç¯ãéå§ããŸããã
ç°¡åãªäŸ-èªåè»å·¥å Ž
åºåã·ã¹ãã ããã¹ãããæåã®ã¿ã¹ã¯ã¯ããªãé¢åã§ãã»ãšãã©ã®äººã«ãšã£ãŠç解ã§ããªãçšèªãå€ãããã次ã®äŸã䜿çšããŠã©ã€ãã©ãªã®äœæ¥ãããã«èª¬æããŸãã
èªåè»å·¥å ŽããããšããŸãã ããããã¹ãããå¿ èŠããããŸããã€ãŸããã³ã³ãã¢å¶åŸ¡ã³ã³ãã¥ãŒã¿ãŒã«è»ã®æ§æãæåºããçµã¿ç«ãŠãããŠäœãåºåããããã確èªããå¿ èŠããããŸãã
å ¥åã«ããŸããŸãªè»äž¡æ§æãæäŸããŸãã åæ§æã¯æ¬¡ã®ããŒãã§æ§æãããŠããŸãïŒã·ã£ãŒã·ïŒä¹çšè»ãã¯ãã¹ã«ã³ããªãŒïŒããšã³ãžã³ïŒã¿ã€ãïŒãã£ãŒãŒã«ãŸãã¯ã¬ãœãªã³ãšå®¹éïŒãè»èŒªïŒè»èŒªã®æ°ãçŽåŸãé³é ãŸãã¯å»å°ïŒãè»äœïŒã»ãã³ãã¯ãŒããã³ã³ããŒããã«ãå šå°åœ¢åè»äž¡ïŒãã®ã¢ããã¯ã¹ïŒæåãèªåïŒã çæ³çã«ã¯ãå¯èœãªãã¹ãŠã®æ£ããçµã¿åããããã§ãã¯ããå¿ èŠããããŸãïŒTKã§çŠæ¢ãããŠããçµã¿åãããé€ãïŒã
å·¥å Žã§ç°ãªãè»ãçç£ã§ããããšã¯æããã§ãããäžéšã®è»ã¯ä»ã®è»ãããäžè¬çã§ãã äžè¬çãªããžãã¯ãšåžå Žã®èŠä»¶ã«åºã¥ããŠãã»ãšãã©ã®å Žåã4茪ãã»ãã³ã15ã€ã³ãã®å»å°ä»ãè»èŒªã1.6ã¬ãœãªã³ãšã³ãžã³ãããã³ããã¥ã¢ã«ã®ã¢ããã¯ã¹ãåããè»ãææãããšæ³å®ããã®ã¯çã«ããªã£ãŠããŸãã
å°ãªããšã4ïŒ ã®ãã€ãŒã«ãšã»ãã³ã®ããã£ã90ïŒ ã«ãªããŸãïŒ ãããåºæ¬èšå®ã«ãªããŸãã æ®ãã®ãã©ã¡ãŒã¿ãŒã¯ãåãååã«åŸã£ãŠéžæãããŸãã
ãŸããåæ§æã®æ©èœã®ç¯å²ãæ€èšãã䟡å€ããããŸããã€ãŸããã»ãšãã©ã®ãã§ãã¯ãäœããã®æ§æã«è©²åœããå Žåããããåºæ¬æ§æãšããŠéžæããå¿ èŠããããŸãã èšãæããã°ãåžå Žã®èŠä»¶ã«ããããããããŒã«ãšããŠãã¿ã§SUVããã¹ãããå Žåããã®æ§æã¯ãã¹ãã§æãé »ç¹ã«çºçãããããåºæ¬çãªæ§æã«ãªããŸãã
ããã«ãåºæ¬æ§æã®äžéšã®ãã©ã¡ãŒã¿ãŒã®ã¿ãå€æŽããã°ãããŸããŸãªè»ãååŸã§ããŸãã ã©ã€ãã©ãªã§ãããã®ååãã©ã®ããã«å®è£ ãããŠããããèŠãŠã¿ãŸãããã
ObjectBuildersã©ã€ãã©ãªã®å®è£ ãšäœ¿çš
ããŒã«ã¯2ã€ã®ã¬ãã«ã§æ©èœããŸãã
- æ§æ -ãªããžã§ã¯ãéã®é¢ä¿ãèšå®ãããªããžã§ã¯ãèªäœãçæããããã®ããŒã«ãæäŸããŸãã
- 修食å -ãªããžã§ã¯ãã®ã°ã©ãã«ãããïŒä¿®é£ŸåïŒãèšè¿°ããŠé©çšããããã®ããŒã«ãæäŸããŸãã
修食åã¯ã次ã®2ã€ã®ã¿ã€ãã«åããããŸãã
- InstanceModifiers-ãªããžã§ã¯ã修食åã
- ConstructModifiers-修食åãäœæããŸãã
ããšãã°ã
class Bar: bar = 1 class Foo: baz = 10 bars = Collection(Bar) my_foo = Builder(Foo).withA(NumberOf(Foo.bars, 5)).build()
ããã§ã¯ã
bars = Collection(Bar)
ã®æ§ç¯ã¯ã¬ãã«1ã§ããã¯ã©ã¹Fooã«ã¯ãBarã®Nåã®ãªããžã§ã¯ããå«ããããšãã§ãããšèšããŸãã ãããã®ãªããžã§ã¯ãã«ã¯
my_foo.bars[i]
ä»ããŠã¢ã¯ã»ã¹ã§ããŸãã ãŸãã
NumberOf(Foo.bars, 5)
ã³ã³ã¹ãã©ã¯ã
NumberOf(Foo.bars, 5)
ã¯ã¬ãã«2ã§ãã5ã€ã®Barãªããžã§ã¯ããå éšã«ããFooãªããžã§ã¯ããååŸããŸãã
ããã©ã«ãã§ã¯ã2ã€ã®ãªããžã§ã¯ãã®ã°ã©ããäœæãããŸããFooãšã1ã€ã®èŠçŽ ã§æ§æããããã¹ããããBarãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã§ãã
NumberOf(Foo.bars, 5)
ã¯
NumberOf(Foo.bars, 5)
ã€ã®Barãªããžã§ã¯ããFooãªããžã§ã¯ãã«åã蟌ãŸããããã«ã°ã©ãã«é©çšã§ãã修食åã§ãã
èªåè»å·¥å Žã«æ»ããŸãããã
ãªããžã§ã¯ãã¢ãã«
æåã«ããã¡ã¯ããªãæäœãããªããžã§ã¯ãã®ã¯ã©ã¹ãšãã®ããããã£ãèšè¿°ããå¿ èŠããããŸãã
CHASSIS_LIGHT = 0 # CHASSIS_HEAVY = 1 # ENGINE_PETROL = 0 # ENGINE_DIESEL = 1 # WHEEL_STAMPED = 0 # WHEEL_ALLOY = 1 # BODY_SEDAN = 0 # BODY_COUPE = 1 # BODY_CABRIO = 2 # BODY_HEAVY = 3 # TRANSMISSION_MANUAL = 0 # TRANSMISSION_AUTO = 1 # # class Chassis: type = CHASSIS_LIGHT # class Engine: type = ENGINE_PETROL volume = 1.6 # class Wheel: radius = 15 type = WHEEL_STAMPED # class Body: type = BODY_SEDAN number = ??? # . . # class Transmission: type = TRANSMISSION_MANUAL # # . - / . class Spoiler: foo = None
ãããïŒ
ããã§ãã¯ã©ã¹ã®ãã£ãŒã«ããåæåããå€ã¯ãæãäžè¬çãªæ§æã«åºã¥ããŠéžæãããŸããã çŸåšããªããžã§ã¯ããšåçãã©ã¡ãŒã¿ãŒã®éã«ã¯ååãªæ¥ç¶ããããŸãããåã ã®éšåãè»å ã§ã©ã®ããã«çµã¿ç«ãŠãããŠãããã瀺ãããã©ã¡ãŒã¿ãŒãæå®ããå¿ èŠããããŸãã
ããšãã°ã
chassis = Chassis() wheels = [Wheel() for _ in range(4)] engine = Engine() body = Body() ... chassis.wheels = wheels chassis.engine = engine engine.chassis = chassis chassis.body = body body.number = random() ...
å°ããªã°ã©ãã®å Žåãããã¯ç°¡åã§ãã ã°ã©ãã«æ°åã®ãªããžã§ã¯ããšå€ãã®ãã©ã¡ãŒã¿ãããå Žåãéåžžã«é«äŸ¡ã«ãªããŸãã ããã容æã«ããããã«ãObjectBuildersã¯ã³ã³ã¹ãã©ã¯ããæäŸããŸãã
æ§ç¯ç©
äžèšã§ã¯ãCollectionïŒïŒæ§é ã䜿çšããçãFoo-Barã®äŸãæ¢ã«ãããŸããã
ç§ãã¡ã®ã©ã€ãã©ãªã«ã¯ãããŸããŸãªããŒãºã«å¿ããŠãããã€ãã®ç°ãªãã¿ã€ãã®ãã¶ã€ã³ããããŸãã
ã¯ã©ã¹ã³ã¬ã¯ã·ã§ã³ïŒtypeToBuildãnumber = 1ïŒ
ã¿ã€ãtypeToBuildã®ãªããžã§ã¯ãã®ã³ã¬ã¯ã·ã§ã³ã Builder.buildïŒïŒãåŒã³åºããåŸããã®æ§é ã¯typeToBuildåã®ãªããžã§ã¯ãã®ãªã¹ãã«å€ãããŸãã ããã©ã«ãã§ã¯ããªããžã§ã¯ãã®æ°= 1
ã¯ã©ã¹UniqueïŒtypeToBuildïŒ
Builder.buildïŒïŒãåŒã³åºããåŸãtypeToBuildåã®äžæã®ãªããžã§ã¯ãã«å€ãããŸãã ã°ã©ãã®ã©ããã«typeToBuildåã®ãªããžã§ã¯ããæ¢ã«ååšããå Žåã§ããæ°ãããªããžã§ã¯ããçæãããšããæå³ã§ãŠããŒã¯ã§ãã
åå©çšã¯ã©ã¹ïŒtypeToBuildãããŒã«ã«= FalseãããŒ= []ïŒ
Uniqueã³ã³ã¹ãã©ã¯ããšã¯å¯Ÿç §çã«ãã°ã©ãã«typeToBuildåã®ãªããžã§ã¯ããæ¢ã«ååšããå Žåã¯ããã䜿çšãããååšããªãå Žåã¯æ°ãããªããžã§ã¯ããäœæãããŸãã ãã®å Žåãkeysãã©ã¡ãŒã¿ãŒã䜿çšããŠããªããžã§ã¯ããåããšèŠãªãããã«typeToBuildã¯ã©ã¹ã®ã©ã®ãã£ãŒã«ããäžèŽããå¿ èŠãããããæå®ã§ããŸãã
ãã¶ãã¯ã©ã¹ïŒæ§ç¯ïŒ
ãã®èšèšã§ã¯ãå¥ã®ãªããžã§ã¯ãïŒããã³ãã®ãªããžã§ã¯ãèªäœïŒãšã®éä¿¡ãååšããå Žåãšååšããªãå ŽåããããŸãã ããã©ã«ãã§ã¯ã
Builder.build()
åŒã³åºããš
Builder.build()
Noneã«å€æãããŸãã ããã¯ã以äžã§èª¬æãã
Enabled()
修食åã«ãã£ãŠæå¹ã«ãªããŸãã
ã¯ã©ã¹RandomïŒéå§= 1ãçµäº= 100500ããã¿ãŒã³=ãªãïŒ
build()
ã¹ããŒãžã§ã®ãã®æ§é ã¯ãéå§ããçµäºãŸã§ã©ã³ãã ãªintã«å€æããããããã¿ãŒã³ãæå®ãããŠããå Žåã¯æååã«å€æãããŸãã ãã¿ãŒã³ã«ã¯1ã€ã®ããŒã«ãŒïŒ dãå«ãŸããŠããå¿ èŠãããããã®ä»£ããã«éå§ããçµäºãŸã§ã®ä¹±æ°ã眮ãæããããŸãã
ã¯ã©ã¹UplinkïŒïŒ
foo.bar.foo = fooã®ããã«ãåæ¹åã®ãªããžã§ã¯ãã®æ¥ç¶ãèšå®ã§ããŸãã
ãªããžã§ã¯ãã®çžäºé¢ä¿ã«é¢ããæ å ±ãå«ãŸããããã«ãConstructsã䜿çšããŠã¢ãã«ãæžãæããŠã¿ãŸãããã
# class Chassis: type = CHASSIS_LIGHT **engine = Unique(Engine)** **body = Unique(Body)** **wheels = Collection(Wheel, number=4)** **transmission = Reused(Transmission)** # class Engine: type = ENGINE_PETROL volume = 1.6 **transmission = Reused(Transmission)** # class Wheel: radius = 15 type = WHEEL_STAMPED **transmission = Reused(Transmission)** # class Body: type = BODY_SEDAN number = **Random()** # . . spoiler = **Maybe(Unique(Spoiler))** # . - . # class Transmission: type = TRANSMISSION_MANUAL # class Spoiler: foo = None
ãã®çµæã次ã®ããšã説æããŸããã
- ã·ã£ãŒã·ã«åãä»ãïŒãšã³ãžã³ãããã£ããã€ãŒã«ããã©ã³ã¹ããã·ã§ã³ã
- ããã€ãã®ãã€ãŒã«ãæ¥ç¶ãããŠããŸã-4ïŒããã©ã«ãã§ã¯ãåŸã§åçã«å€æŽããããšãå¯èœã§ãïŒã
- ã·ã£ã·ãŒããšã³ãžã³ããã€ãŒã«ã¯ãã©ã³ã¹ããã·ã§ã³ãèªåèªèº«ã«åãä»ããŸãã ãããŠããŸã£ããåãã§ãã ããã¯ãåå©çšãããèšèšã«ãã£ãŠèšŒæãããŠããŸãã
- ã¹ãã€ã©ãŒãããã£ã«åãä»ããããšãã§ããŸãïŒãªãã·ã§ã³ãšããŠãããã©ã«ãã§ã¯ååšããŸããïŒã
- è»äœçªå·ã¯ãè»äž¡ã®çµã¿ç«ãŠäžã«çæãããŸãã
- ä»ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯ããã©ã«ãã§èšå®ãããŠããŸãïŒãã ããåŸã§åçã«èšå®ããããšãã§ããŸãïŒã
ããã§äœãããã®ã§ããããïŒ ããã§ã1åã®åŒã³åºãã§æ¬æ Œçãªè»ãå ¥æã§ããŸãïŒ åºæ¬ã«å¿ å®ã
car = Builder(Chassis).build()
ãããã£ãŠããªããžã§ã¯ãã¿ã€ãã¯ã·ã£ãŒã·ã§ãã
>>>car.engine.volume 1.6 >>>car.wheels[0].radius 15 >>>car.body.spoiler None
ãŸããªã©ã
ã€ãŸããå®éã«ã¯ãã·ã£ãŒã·ã¿ã€ãã®ãªããžã§ã¯ãã«å ããŠãã·ã£ãŒã·ã¿ã€ãã®ãªããžã§ã¯ãã«é¢é£ä»ããããŠãããã¹ãŠã®ãªããžã§ã¯ãïŒãšã³ãžã³ããã€ãŒã«x 4ãããã£ããã©ã³ã¹ããã·ã§ã³ïŒãäœæãããŸãã ããã©ã«ãã§ã¯ãConstruct MaybeïŒïŒã¯ãªããžã§ã¯ããäœæããŸããããNoneã«å€æããããããSpoilerãªããžã§ã¯ãã¯äœæãããŸããã
äžè¬ã«ãä»»æã®éšåïŒã°ã©ãã®æäžéšïŒããè»ã®çµã¿ç«ãŠãéå§ããä»»æã®ã¯ã©ã¹ãBuilderïŒtypeToBuildïŒã«æž¡ããŸãã
ããããã°ã©ãã«ã¯æåãšããžããããããã°ã©ãã¯æåã®é ç¹ããå°éã§ããé ç¹ã®ã¿ã§æ§ç¯ãããŸãã
çŸåšã®å®è£ ã§ã¯ãã·ã£ãŒã·äžéšãããã¹ãŠã®ããŒã¯ããšã³ãžã³äžéšãããã©ã³ã¹ããã·ã§ã³ã®ã¿ãããã³ããã£äžéšããã¹ãã€ã©ãŒã®ã¿ã«å°éã§ããŸãã
ããšãã°ã次ã®ãšããã§ãã
>>>engine = Builder(Engine).build() >>>engine.trasmission.type == TRANSMISSION_MANUAL True >>>engine.transmission.engine AttributeError: Transmission instance has no attribute 'engine'
ãã®å Žåããããã®2ã€ã®ãªããžã§ã¯ãã®ã¿ãäœæãããŸãã
ããããã®éšåããæ¬æ Œçãªèªåè»ã®çµã¿ç«ãŠãéå§ã§ããããã«ããã«ã¯ãåæ¹åã®éä¿¡ã«åæ Œããå¿ èŠããããŸãã
# class Chassis: type = CHASSIS_LIGHT engine = Unique(Engine) body = Unique(Body) wheels = Collection(Wheel, number=4) transmission = Reused(Transmission) # class Engine: type = ENGINE_PETROL volume = 1.6 transmission = Reused(Transmission) **chassis = Uplink()** **Engine.chassis.linksTo(Chassis, Chassis.engine)** # class Wheel: radius = 15 type = WHEEL_STAMPED transmission = Reused(Transmission) **chassis = Uplink()** **Wheel.chassis.linksTo(Chassis, Chassis.wheels)** # class Body: type = BODY_SEDAN number = Random() # . . spoiler = Maybe(Unique(Spoiler)) # . - . **chassis = Uplink()** **Body.chassis.linksTo(Chassis, Chassis.body)** # class Transmission: type = TRANSMISSION_MANUAL **chassis = Uplink()** **engine = Uplink()** **Transmission.chassis.linksTo(Chassis, Chassis.transmission)** **Transmission.engine.linksTo(Engine, Engine.transmission)** # class Spoiler: foo = None **body = Uplink()** **Spoiler.body.linksTo(Body, Body.spoiler)**
ããã§ãBuilderïŒtypeToBuildïŒ.buildïŒïŒãåŒã³åºããšãã«ãã©ã®éšåããã§ãè»ãçµã¿ç«ãŠãããšãã§ããŸãïŒ ãã®å ŽåïŒ
>>>engine = Builder(Engine).build() >>>engine.transmission.chassis.engine == engine True >>>engine.transmission.chassis.wheels[0].transmission.engine == engine True
ãã«ããŒã¯ãæ¥ç¶ïŒã¢ãããªã³ã¯ãå«ãïŒãééããŠãå¿ èŠãªãã¹ãŠã®ãªããžã§ã¯ããäœæããã¢ãã«ã®äœ¿çšãç°¡çŽ åããŸãã
ããšãã°ããšã³ãžã³ã¿ã€ãã®ãªããžã§ã¯ãã䜿çšããå ŽåãBuilderïŒãšã³ãžã³ïŒã䜿çšããæ¹ã䟿å©ã§ãããåæã«å¿ èŠãªãªããžã§ã¯ãããã¹ãŠäœæãããçžäºã«ãªã³ã¯ãããŸãã
ãã®ããããã¹ãã·ã¹ãã ã®ãªããžã§ã¯ãã¢ãã«ãè»å šäœã§æ§ç¯ããŠã䟿å©ã«èšè¿°ããæ¹æ³ãæ€èšããŸããã ãããããã®è»ã¯ãŸã ããŒã¹ã«ãããŸãã
修食å
ObjectBuildersã©ã€ãã©ãªã®ãªããžã§ã¯ãã®ã°ã©ãã®åºæ¬èšå®ãå€æŽããããã«ãããã€ãã®ã¿ã€ãã®ä¿®é£ŸåãæäŸãããŠããŸãã åè¿°ã®ããã«ã修食åã¯InstanceModifierãšConstructModifierã®2ã€ã®ã¿ã€ãã«åããããŸãã
- InstanceModifierã䜿çšãããšãå€ã§è¡šããããªããžã§ã¯ãã®ãã£ãŒã«ããå€æŽããããå®æãããªããžã§ã¯ãã«å¯ŸããŠããã€ãã®ã¢ã¯ã·ã§ã³ãå®è¡ãããã§ããŸãã
- ConstructModifierã䜿çšãããšãã¯ã©ã¹ã®äžéšã®ãã£ãŒã«ãã«å²ãåœãŠãããŠããConstructsãªããžã§ã¯ãã®ãã©ã¡ãŒã¿ãŒãå€æŽã§ããŸãã
ãã¹ãŠã®ä¿®é£Ÿåãšãã®æ©èœã®ãªã¹ããæ€èšããŠãã ããïŒãããã®äœæ¥ã¯äŸã䜿çšããŠèª¬æããŸãïŒã
ã¯ã©ã¹InstanceModifierïŒclassToRunOnïŒ
å®éãæåã§å¯äžã®ïŒãããŸã§ã®ãšããïŒInstanceModifierã¬ãã«ä¿®é£Ÿåã ãªããžã§ã¯ãã®ãã£ãŒã«ãã®å€ãå€æŽãããããªããžã§ã¯ãã«å¯ŸããŠäœããã®ã¢ã¯ã·ã§ã³ãå®è¡ãããã§ããŸãã
Builder.build()
ãåŒã³åºããšããªããžã§ã¯ãã°ã©ãã®classToRunOnã¿ã€ãã®åãªããžã§ã¯ãã§å®è¡ãããŸãã
2ã€ã®æ¹æ³ããããŸãã
-
def thatSets(self, **kwargs)
-ãªããžã§ã¯ãã®ãã£ãŒã«ãã®å€ãå€æŽã§ããŸãã key = valueã®ãã¢ã¯åŒæ°ãšããŠæž¡ãããŸããkeyã¯ãå€ã®å€ãå²ãåœãŠãå¿ èŠãããclassToRunOnåã®ãªããžã§ã¯ãã®ãã£ãŒã«ãã®ååã§ãã -
def thatDoes(self, action)
-classToRunOnã¿ã€ãã®ãªããžã§ã¯ãã«å¯ŸããŠäœããã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã action-classToRunOnåã®ãªããžã§ã¯ããåŒæ°ãšããŠåãã¡ãœããã
ã¯ã©ã¹EnabledïŒwhatïŒ
ConstructModifierã¬ãã«ä¿®é£Ÿåã Maybeãã¢ã¯ãã£ãç¶æ ã«ããŠãBuilder.buildïŒïŒãåŒã³åºãããšãã«ãªããžã§ã¯ãã®äœæãéå§ã§ããããã«ããŸãã äœ -å€åæ§ç¯ããŸãã ããšãã°ãè»ã«é¢ãããã®äŸã®Body.spoilerã
äžããããã¯ã©ã¹ïŒæ§ç¯ãå€ïŒ
ConstructModifierã¬ãã«ä¿®é£Ÿåã ã°ã©ããäœæãã段éã§ãConstructïŒwhatïŒãç¹å®ã®ãªããžã§ã¯ããŸãã¯å€ïŒvalueïŒã«çœ®ãæããããšãã§ããŸãã
ã¯ã©ã¹HaveInïŒwhatã*ã€ã³ã¹ã¿ã³ã¹ïŒ
ConstructModifierã¬ãã«ä¿®é£Ÿåã ã³ã¬ã¯ã·ã§ã³ã®æ§ç¯ïŒwhatïŒã§äœ¿çšãããç¹å®ã®ãªããžã§ã¯ãïŒ*ã€ã³ã¹ã¿ã³ã¹ïŒããããã«è¿œå ã§ããŸãã
ãŸãã¯ã*ã€ã³ã¹ã¿ã³ã¹èŠçŽ ã®1ã€ãintã®å Žåãã³ã¬ã¯ã·ã§ã³ã®ãµã€ãºã¯ãã®intã®å€ã ãå¢å ããŸãã ãã®å ŽåãCollectionãã¶ã€ã³ã«ãã£ãŠçæããããªããžã§ã¯ãã®æ°ã¯ãæ瀺çã«è¿œå ãããªããžã§ã¯ãã®æ°ã ãæžå°ããŸãã
ã¯ã©ã¹NumberOfïŒäœãéïŒ
ConstructModifierã¬ãã«ä¿®é£Ÿåã ã³ã¬ã¯ã·ã§ã³ã®æ§æïŒwhatïŒã§äœ¿çšããããµã€ãºã«ãã£ãŠãµã€ãºãå€æŽã§ããŸãã
ã¯ã©ã¹OneOfïŒwhatã*修食åïŒ
ConstructModifierã¬ãã«ä¿®é£Ÿåã ã³ã¬ã¯ã·ã§ã³ã®æ§æïŒwhatïŒã§äœ¿çšãããã³ã¬ã¯ã·ã§ã³å ã®ãªããžã§ã¯ãã®1ã€ã«äžé£ã®ä¿®é£Ÿå*修食åãé©çšã§ããŸãã å®éãçŸæç¹ã§ã¯-ããã¯å©çšå¯èœãªä¿®é£Ÿåã®ã»ããå šäœã§ãã ã°ã©ãã®åºæ¬èšå®ã®ã»ãšãã©ãã¹ãŠã®å€æŽãç°¡åã«èª¬æã§ããŸãã
Builder.withAïŒ*修食åïŒã¡ãœãããåŒã³åºãããšã«ãããã¢ã»ã³ããªæ®µéã§ãªããžã§ã¯ãã®ã°ã©ãã«ä¿®é£Ÿåãé©çšãããŸãã
äŸãšãšãã«ä¿®é£Ÿåã®æ©èœãæ€èšããŠãã ããã
äŸ1.ã¹ãã€ã©ãŒä»ãã®è»ã欲ããïŒ
spoiler_option = Enabled(Body.spoiler) car = Builder(Chassis).withA(spoiler_option).build() >>>car.body.spoiler is not None True
äŸ2. 6ãªããã«ã®ãã£ãŒãŒã«ãšã³ãžã³ãæèŒããèªåè»ãå¿ èŠã§ãã
big_diesel = InstanceModifier(Engine).thatSets(type=ENGINE_DIESEL, volume=6.0) car = Builder(Chassis).withA(big_diesel).build() >>>car.engine.volume == 6.0 True >>>car.engine.type == ENGINE_DIESEL True
InstanceModifier.thatDoesïŒïŒã䜿çšããŠåãããšãã§ããŸãã
def make_big_engine(engine): engine.type = ENGINE_DIESEL engine.volume = 6.0 big_diesel = InstanceModifier(Engine).thatDoes(make_big_engine)
make_big_engineã¡ãœããã§ã¯èšç®ãå®è¡ãããæ¡ä»¶ãå®è£ ãããã§ãããããéåžžããã¹ãå®è¡æ®µéã§äœããã®æ¹æ³ã§ãã©ã¡ãŒã¿ãŒãåçã«èšç®ããå¿ èŠãããå Žåã«äœ¿çšãããŸãã
äŸ3. 6ã€ã®è»èŒªãšéããã©ãããã©ãŒã ãå¿ èŠã§ãã
six_wheeled_heavy_chassis = [NumberOf(Chassis.wheels, 6), InstanceModifier(Chassis).thatSets(Chassis.type=CHASSIS_HEAVY)] car = Builder(Chassis).withA(six_wheeled_heavy_chassis).build() >>>len(car.chassis.wheels) == 6 True >>>car.chassis.type == CHASSIS_HEAVY True
Builder.withAïŒïŒã¡ãœããã¯ã1ã€ã®Modifierãªããžã§ã¯ãããã®ãããªãªããžã§ã¯ãã®é åããŸãã¯ä»»æã®æ·±ãã®ãã¹ããããé åãæã€é åãšããŠåãå ¥ããããšãã§ãããšããäºå®ã«æ³šæãã䟡å€ããããŸãã
äŸ4 ç§ãã¡ã¯ã倧ããªããã£ãšããããã®è»èŒªãåãã匷åãªå šå°åœ¢åè»äž¡ãæ±ããŠããŸãã
rover_capabilities = [big_diesel] + \ six_wheeled_heavy_chassis + \ [InstanceModifier(Body).thatSets(type=BODY_HEAVY)] rover = Builder(Chassis).withA(rover_capabilities).build()
éèŠãªç¹ã¯ããã§ã«èšè¿°ããbig_dieselããã³six_wheeled_heavy_chassis修食åãåå©çšããããšã§ãã ãã®ãããå®éã®ç掻ã§ã¯ãäœæãããã¹ãã®æ°ãå€ãã»ã©ãæ¢è£œã®ä¿®é£Ÿåãå€ããªããŸãã ããã«ã¯3ã€ã®å©ç¹ããããŸãã
- å¿ èŠãªããŒã¿ãæºåããæ¹æ³ã§ã¯ãªãããã¹ãæ¹æ³ãèããŠã修食åãåå©çšããŠãã¹ããããéãæžãããšãã§ããŸãã
- æ£ãã修食ååã«ããããã¹ãã§äœ¿çšãããããŒã¿ãšãã®æ§ææ¹æ³ãæ£ç¢ºã«ç解ãããããªããŸãã
- ã·ã¹ãã æ§æã®å€æŽïŒããšãã°ãéçºè ããªããžã§ã¯ãéã®æ¥ç¶ãå€æŽããæ©èœãäœæããïŒã䜿çšãããšããã¹ãŠã®ãã¹ãã1ãæã§ç°¡åã«ä¿®åŸ©ãã誀ã£ã修食åã®ã¿ãä¿®æ£ã§ããŸãïŒ
äŸ5.è»èŒªã®1ã€ã14ã€ã³ãã1ã€ã16ã€ã³ãããã1ã€ã4ã15ã€ã³ãã®ååŸãæã€å Žåãå šå°åœ¢åè»äž¡ãã©ã®ããã«é²ããã確èªããŸãã
def wheel_radius(radius): return OneOf(Chassis.wheels, InstanceModifier(Wheel).thatSets(radius=radius)) car = Builder(Chassis).withA(rover_capabilities) .withA(wheel_radius(14), wheel_radius(16)) .build()
äŸ6.æåŸã®2ã€ã®æªäœ¿çšã¿ã€ãã®ä¿®é£ŸåãHavingInãšGivenããããŸãã ãããã¯ãCollectionã³ã³ã¹ãã©ã¯ãã§HaveInã䜿çšãããå®æãããªããžã§ã¯ãããã®å Žæã«é 眮ããããã«ä»ã®ãã¹ãŠã®ã³ã³ã¹ãã©ã¯ãã§æå®ããããšããç¹ã§ã®ã¿ç°ãªããŸãã
äŸã§HaveInã®ã¿ãæ€èšããŠãã ããã ãã§ã«æåŸã®è»ã®ãã€ãŒã«ã1ã€æ®ã£ãŠããŠãæ°ãããã€ãŒã«ã«åãä»ããããšããŸãã
wheel = Wheel() car = Builder(Chassis).withA(HavingIn(Chassis.wheels, wheel)).build()
æå®ããã修食åã¯åæ§ã«æ©èœããŸãã
ãã ããå®æãããªããžã§ã¯ããããã«æž¡ããšããã®äžã«æ¥ç¶ã¯äœæããããäœãå€æŽãããããã®ãŸãŸã®ã°ã©ãã«çœ®ãæããããããããããã®ä¿®é£Ÿåã®äœ¿çšã«ã¯æ³šæãå¿ èŠã§ãã
Builder(typeToBuild).withA(*modifiers).build()
ãåŒã³åºãã¢ã«ãŽãªãºã ãæ€èšããŠãã ããã
- ã¿ã€ã
typeToBuild
ã®çŸåšã®ãªããžã§ã¯ãtypeToBuild
- Construct修食åã*修食åãªã¹ãã«ããå Žåããããã¯çŸåšã®ãªããžã§ã¯ãã®ããããã£ã«ãã察å¿ããã¿ã€ãã®Constructãªããžã§ã¯ãã«é©çšãããŸã
- çŸåšã®ãªããžã§ã¯ãã®ããããã£ã«ãããã¹ãŠã®Constructãªããžã§ã¯ãã¯ãåã ã®Constructã®ã«ãŒã«ã«åŸã£ãŠãªããžã§ã¯ãã«å€æãããŸã
-
InstanceModifier(currentObjectType).thatSets()
*修食åãªã¹ãã«ããå Žåããããã¯çŸåšã®ãªããžã§ã¯ãã«é©çšãããŸã - å€æãããã³ã³ã¹ãã©ã¯ãããååŸãããã¹ãŠã®ãªããžã§ã¯ãã«ååž°çã«éããŠãã¹ããã2ããã¢ã«ãŽãªãºã ãç¹°ãè¿ããŸãã
-
InstanceModifier(clazz).thatDoes()
*修食åãªã¹ãã«ããå Žåãæ§ç¯ãããã°ã©ãã®clazzã¿ã€ãã®ãªããžã§ã¯ãã«é©çšãããŸã
以äžã§ãïŒ ãã®ã·ã³ãã«ãªã©ã€ãã©ãªã®å©ããåããŠãç§ãã¡ã¯ç掻ãå€§å¹ ã«ç°¡çŽ åããå€ãã®å·¥æ°ãç¯çŽããããšãã§ããŸããã
äžçªäžã®è¡ïŒç§ãã¡ã«ã¯äœãããããªãããããã¹ãŠå¿ èŠãªã®ã§ããïŒ
- ObjectBuildersã¯ããªããžã§ã¯ãã¢ãã«ã«ãã£ãŠèšè¿°ãããããŒã¿ã®ããããã£ãç°¡åãã€èªã¿ãããèšè¿°ãããã®ããŒã¿ãåçã«çæããæ©èœãæäŸããŸãã
- ãªããžã§ã¯ããšãã®å€æŽéã®é¢ä¿ã®ããžãã¯ã¯ãå¥ã®è«çã¬ãã«ã«å²ãåœãŠãããŸããããã«ãããåè¿°ã®ããŒã¿æ§æãåå©çšã§ããå¿ èŠã«å¿ããŠãããŒã¿ã䜿çšããããã¹ãŠã®å Žæã§ä¿®åŸ©ããã®ã§ã¯ãªãã1ã€ã®å Žæã§æ¥ç¶ããã³ããŒã¿æ§æã®ããžãã¯ãç°¡åã«ä¿®åŸ©ã§ããŸãã
- ãã¹ãã§ã¯ãå¿ èŠãªãã¹ãŠã®ããµã€ããèšå®ãšãªããžã§ã¯ããæ°ã«ããã«ããã¹ãã®åäœã«å®éã«åœ±é¿ããããããã£ã®ã¿ãèšè¿°ããããšãã§ãããããããŒã¿ãšã·ã¹ãã ã®åäœïŒãã¹ãå ã®ãã¹ãïŒã®é¢ä¿ãç°¡åã«ç解ã§ããŸãã
ãã ããå®è£ ã®çŸåšã®æ®µéã§ã®ã¢ãããŒãã«ã¯æ¬ ç¹ããããŸãã
- ã©ãŒãžãªããžã§ã¯ãã¢ãã«ã®å Žåããã¹ãŠã®é¢ä¿ãæ£ããèšè¿°ããããšã¯éåžžã«å°é£ã«ãªããŸãã
- ã¢ãã£ãã¡ã€ã€ã®ãããã±ãŒãžãã倧éã«èç©ããããšãæ¢åã®ã¢ãã£ãã¡ã€ã€ãåå©çšãããããç¬èªã®ã¢ãã£ãã¡ã€ãäœæããèªæãé«ãŸããŸãã
- å€æ°ã®ä¿®é£Ÿåãã°ã©ãã«é©çšãããšããšã©ãŒãçºçããå Žåã«ããŒã¿ã®äžæŽåã«æ°ã¥ã/èŠã€ããã®ãå°é£ã«ãªããŸãã
éåžžãã¢ãã«ã¯ã»ãšãã©å€åããªããããããã«å€åãããããæåã®ãã€ãã¹ã¯ããã»ã©éèŠã§ã¯ãããŸããã 2çªç®ã®ãã€ãã¹ã¯ãéçºäžã®ã³ãŒãã«åºæã®ãã®ã§ãïŒã³ããŒããŒã¹ãæ奜家ã¯ã©ãã«ã§ãããŸãïŒã 3çªç®ã®ãã€ãã¹ã¯ãæ¢è£œã®ïŒããããã°æžã¿ããšåŒã°ããïŒã¢ãã£ãã¡ã€ã¢ããã±ãŒãžã®èç©ãšæ¬¡ç¬¬ã«ãªããªããããã«ãåä¿¡ããããŒã¿ã®ãã¹ãäžã«äžæŽåãèŠãããããã«ãªããŸãã
ãã¹ãŠã®æ¬ ç¹ãèæ ®ã«å ¥ããŠãããã¹ããäœæãããã¹ãããµããŒãããããŒã¿ã«äŸåããã·ã¹ãã ã®åäœãã©ã®ããã«æ§æãããŠããããæ£ç¢ºã«ææ¡ããå¿ èŠãããå Žåãæéãç¯çŽã§ããŸãã äžè¬ã«ãå ã«è¿°ã¹ããã¹ãŠã®ããšã¯ãPythonãèµ·åãããšãã«ã¡ã¢ãªå ã®ãªããžã§ã¯ãã«ã€ããŠèªããããã®ã§ãããå®éã«ã·ã¹ãã ã«å ¥ãããŒã¿ãšã¯é¢ä¿ãããŸããã ããããããã¯ãã©ã¹ã§ãããã¹ãäžã®ã·ã¹ãã ã«çæãããããŒã¿ãçŽæ¥äœæããããŸããŸãªã¢ã«ãŽãªãºã ãå®è£ ããããä»ã®ããŒãºã«ãã®ããŒã¿ã䜿çšãããã§ããŸãã
ããšãã°ãçæãããããŒã¿ãXMLRPC APIãŸãã¯SQL Alchemyãä»ããŠãã¹ã察象ã®ã·ã¹ãã ã«ããŒãã§ããããã«ããã¬ã€ã€ãŒãå®è£ ããŸããã ãŸããObjectBuilderã䜿çšããŠããµãŒããŒãªã¯ãšã¹ãã®ããŒã¿ãJSONããã³XML圢åŒã§çæããŸãã ObjectBuilderã¯ãããŒã¿ãæäœããããã®ããªãæœè±¡çãªã¡ã«ããºã ã§ãããããããªãå¹ åºãçšéããããŸãã èªè ã®äœäººãããã®ããŒã«ãèå³æ·±ãæçšãªãã®ãšèãããã®éçºã«åå ããããšãæ¬åœã«é¡ã£ãŠããŸãã ç§ãã¡ã¯åžžã«æ°ããã¢ã€ãã¢ãææ¡ãæè¿ããŸãã
Githubãããžã§ã¯ãã³ãŒãã
pypiã®æºåå®äºããã±ãŒãžã
å¥åº·ã«äœ¿çšããŠãã ããïŒ