ããããã£ã䜿çšããŠãéåžžã¯åçŽãªgetterãŸãã¯setterã¡ãœããã䜿çšããããŒã¿ã«ã¢ã¯ã»ã¹ããããå€ãå²ãåœãŠããããŸãã
å®çŸ©
ãã¡ãããèšç®ãããã»ã©è€éã§ãªãå Žåã¯ãã¢ã¯ã»ã¹ã¡ãœããã®åŒã³åºããšå±æ§ã®å²ãåœãŠãæšæºã®å±æ§ã¢ã¯ã»ã¹ãšããŠã©ããããæ¹æ³ã
é·æ
å±æ§ã«ç°¡åã«ã¢ã¯ã»ã¹ããããã®getããã³setã¡ãœããã®æ瀺çãªåŒã³åºããæé€ããããšã«ãããèªã¿ããããåäžããŸãã é
延èšç®ãå¯èœã§ãã ã¯ã©ã¹ã€ã³ã¿ãŒãã§ã€ã¹ãç¶æããããšã¯ãPythonãã¹ã®äžéšã§ãããšèããããŠããŸãã ããã©ãŒãã³ã¹ã®èŠ³ç¹ãããå€æ°ãžã®çŽæ¥ã¢ã¯ã»ã¹ãå¿
èŠãªå ŽåãåçŽãªã²ãã¿ãŒã¡ãœããïŒã¢ã¯ã»ãµïŒãä»ããŠããããã£ã«ã¢ã¯ã»ã¹ã§ããŸãã ãŸããã€ã³ã¿ãŒãã§ã€ã¹ãå€æŽããã«ãåŸã§ã¢ã¯ã»ã¹æ¹æ³ãè¿œå ããããšãã§ããŸãã
çæ
ããããã£ã¯ãgetããã³setã¡ãœããã宣èšãããåŸã«å®£èšãããã³ãŒãå
ã®ä»¥äžã®ããããã£ã«äœ¿çšãããããšãèŠæ±ããŸãïŒ
@propertyãã³ã¬ãŒã¿ã䜿çšããŠäœæãããèªã¿åãå°çšããããã£ãé€ãã以äžãåç
§ïŒã
ãªããžã§ã¯ãã¯ã©ã¹ããç¶æ¿ããå¿
èŠããããŸãã ãªãŒããŒããŒãæŒç®åãªã©ã®å¯äœçšãäžæçã«ãªãå ŽåããããŸãã åå«ã¯ã©ã¹ã¯èª€è§£ãæããããããŸããã
解決ç
äœæããã³ãŒãã®ããããã£ã䜿çšããŠãåçŽãªgetã¡ãœãããŸãã¯setã¡ãœããã䜿çšããããŒã¿ã«ã¢ã¯ã»ã¹ãŸãã¯å€æŽããŸãã èªã¿åãå°çšããããã£ã¯ã
@ propertyãã³ã¬ãŒã¿ã䜿çšããŠäœæããå¿
èŠããããŸãã 芪ããããã£ããªãŒããŒã©ã€ããããªãéããããããã£ã®ç¶æ¿ã¯ããŸãéæã«ãªããªãå ŽåããããŸãã ãããã£ãŠãããããã£ãä»ããŠåŒã³åºããããµãã¯ã©ã¹ã®ã¡ãœããããªãŒããŒã©ã€ãããã«ã¯ãã²ãã¿ãŒã¡ãœãããéæ¥çã«åŒã³åºãããããšã確èªããå¿
èŠããããŸãïŒ
ãã³ãã¬ãŒãã¡ãœãããã¿ãŒã³ã䜿çšïŒ
è¯ãïŒ
import math class Square(object): """A square with two properties: a writable area and a read-only perimeter. To use: >>> sq = Square(3) >>> sq.area 9 >>> sq.perimeter 12 >>> sq.area = 16 >>> sq.side 4 >>> sq.perimeter 16 """ def __init__(self, side): self.side = side def __get_area(self): """Calculates the 'area' property.""" return self.side ** 2 def ___get_area(self): """Indirect accessor for 'area' property.""" return self.__get_area() def __set_area(self, area): """Sets the 'area' property.""" self.side = math.sqrt(area) def ___set_area(self, area): """Indirect setter for 'area' property.""" self.__set_area(area) area = property(___get_area, ___set_area, doc="""Gets or sets the area of the square.""") @property def perimeter(self): return self.side * 4