ååãŸã§ã§ãªããžã§ã¯ãæåã®ååæŠã¯çµäºã§ããåŸåæŠã¯ååã®ç¥èãåæãšããŠããã®ã§ãããé£ãããªãšæã£ããååã®åŸ©ç¿ããããããšããªã¹ã¹ã¡ããŸãã
åŸåã®æµã
åŸåã¯ãç¶æ¿ããšããæŠå¿µãäž»ãªããŒããšãªããŸããç¶æ¿ã¯å ·äœçã«ã¯ã¯ã©ã¹Aããã§ã«ããããã®ã¯ã©ã¹AãããŒã¹ã«ããŠæ©èœæ¡åŒµãããã¯ã©ã¹Bãäœããšããææ³ã«ãªããŸãã
ææ³ã«ã€ããŠæ±ãã ãã§ããã°ãã»ã©èŠåŽã¯ããªããšæããŸãããç¶æ¿ã®ã¡ãªãããšæ£ããäœ¿ãæ¹ãçè§£ããããšã¯é£ãããããããŸããããã®ãããååæŠãšåãããã«ããªãããããããããã©ãããã¹ããããšãã£ãè©±ã«æ¯éã眮ããŸããããªãåé·ã«ãªã£ãŠããŸããããããŸããããã容赊é¡ããŸããç¶æ¿ã«ã€ããŠããçšåºŠåŠãã ããç°¡åã«GUIã®äœ¿ãæ¹ãæ±ããGUIã䜿ã£ãŠç¶æ¿ãå®éã«å©çšããŠã¿ãããšæããŸãã
æŠèŠ
æåã«é£ãã話ãç¹°ãè¿ããŠãç ããªã£ãŠããŸãã§ããããããšãããããã£ãããšç¶æ¿ã®ããããã«ã€ããŠã話ããŸãã
ãŸã以äžã®å³ãèŠãŠãã ããã
å·ŠåŽã«ããã®ãã¯ã©ã¹Aã§å³åŽã«ããã®ãã¯ã©ã¹BãšãªããŸããã¯ã©ã¹Bã¯ã¯ã©ã¹Aãç¶æ¿ããŠäœãããŠãããå éšã«ã¯ã©ã¹Aã®èŠçŽ ãåŒãç¶ãã§ããããšãããããŸãããã¯ã©ã¹Bãã¯ã©ã¹Aãæã£ãŠãããã®ã§ã¯ãªãããã¯ã©ã¹Bã¯ã¯ã©ã¹AãããŒã¹ã«äœãããŠãããããšã«æ³šæããŠãã ããã
ããŠããããå®éã«ã³ãŒãã«æžããŠã¿ãŸããããããŸãã¯ã¯ã©ã¹Aã§ãã
class ClassA:
def __init__(self):
self.var_a = 'class a'
def print_a(self):
print('this method is defined in ' + self.var_a)
a = ClassA()
a.print_a()
# this method is defined in class a
var_aãšããã€ã³ã¹ã¿ã³ã¹å€æ°ãšprint_aãšããã¡ãœãããæã£ãŠããŸãããããŸã§ã¯ä»ãŸã§ã«åŠãã ããšã§ãããç¹ã«æ°ãããã®ã§ã¯ãããŸããã
次ã«ãããç¶æ¿ããã¯ã©ã¹Bãå®è£ ããŸãã
class ClassB(ClassA): # <--- ç¶æ¿ã®å®£èš
def __init__(self):
self.var_b = 'class b'
ClassA.__init__(self) # <--- 芪ã¯ã©ã¹ã®åæå
def print_b(self):
print('this method is defined in ' + self.var_b)
print('parent of ' + self.var_b + ' is ' + self.var_a)
泚ç®ããŠæ¬²ããç¹ã¯ããã€ããããŸããããŸãäžçªæåã«ç¥ãå¿ èŠãããã®ã¯ææ³ã§ããäžè¡ç®ã®ã¯ã©ã¹Bã®å®£èšã®åŸãã« () ã§ ClassA ãèšèŒãããŠããããšãããããŸãããããç¶æ¿ã®å®£èšã§ãããããããããšã§ãã¯ã©ã¹Bã¯ã¯ã©ã¹Aãç¶æ¿ãããããšãã§ããããã«ãªããŸãããããŠæ¬¡ã¯ã4è¡ç®ã® "ClassA.__init__(self)" ã§ããããã¯ã¯ã©ã¹Bã®èŠªã¯ã©ã¹ã§ããã¯ã©ã¹Aã®åæåã§ãã
æãåºããŠãã ãããã³ã³ã¹ãã©ã¯ã¿ã§ãã__init__ã¡ãœããã¯åŒæ°ããšããšããã®åŒæ°ãåæåã«å©çšããã®ã§ãããä»åã¯åŒæ°ãselfã ããªã®ã§ãåæåæã«ç¹ã«å€ãæž¡ããªããŠããã®ã§ãããåŒæ°ã2ã€ä»¥äžããå Žåã¯å€ãæž¡ããªããšãšã©ãŒã«ãªããŸããã¯ã©ã¹Aãç¶æ¿ããã¯ã©ã¹Bã®ãªãã§ããã¯ã©ã¹Aãã©ã®ããã«åæåãããããæå®ããå¿ èŠãããããã®4è¡ç®ã¯ãããå®è¡ããŠããŸããä»åã¯èŠªã¯ã©ã¹ã«åŒæ°ããªãã®ã§ããã芪ã¯ã©ã¹ã«åŒæ°ãããå Žåã¯ãåã¯ã©ã¹ã§ã®åæåæã«èŠªã¯ã©ã¹ã«åŒæ°ãæž¡ãå¿ èŠããããŸãã
æåŸã«print_bãèŠãŠãããããã§ããããªãã§self.var_aãåç §ããŠããããšãããããŸããBã®äžã§Aã®ã€ã³ã¹ã¿ã³ã¹å€æ°ã䜿ã£ãŠãããšããããšã§ãã
ãšããããããã®ã¯ã©ã¹Bã䜿ã£ãŠã¿ãŸããããã
b = ClassB()
b.print_b()
# this method is defined in class b
# parent of class b is class a
b.print_a()
# this method is defined in class a
ãŸããã¯ã©ã¹Bã®ã€ã³ã¹ã¿ã³ã¹ã¯åœç¶ãªããã¯ã©ã¹Bã®ã¡ãœãããåŒã³åºãããšãã§ããŸããåºåãèŠãŠããããšãããããã«ãã¯ã©ã¹Aã®ã€ã³ã¹ã¿ã³ã¹å€æ°ãå©çšããããšãã§ããŠããŸããã
芪ã®ã€ã³ã¹ã¿ã³ã¹å€æ°ã ãã§ãªãã芪ã®ã¡ãœãããå©çšããããšãå¯èœã§ããã¯ã©ã¹Bã®ã€ã³ã¹ã¿ã³ã¹ããã¯ã©ã¹Aã§å®çŸ©ãããŠãã print_a ã¡ãœãããåŒã³åºããŠããŸãããç¹ã«ãšã©ãŒãªãåäœããŠããããšãããããŸãã
ã ãããã©ãããäœ¿ãæ¹ããããããã£ãŠããã ããã§ããããã
ç¶æ¿ã䜿ãã¡ãªãã
å ã»ã©ã®äŸãããç¶æ¿ã®äœ¿ãæ¹ã¯ããã£ãŠããã ããããšæããŸãããã ãåé¡ãšãªãã®ã¯ãªããã®ãããªããšãããã®ãã ãšæããŸãã
ããšãã°å çšã®äŸã§ããã°ãããããã¯ã©ã¹Aãäœã£ãŠãã¯ã©ã¹Bã«ç¶æ¿ããããªã©ãšããé¢åãªããšãããããããªãå®çŸ©ããŠããŸãã°ããã§ããããšãã°ä»¥äžã®ãããªã³ãŒããæžããšãå ã»ã©ã®ã¯ã©ã¹Aãªãã§ãã¯ã©ã¹Bã«å ã»ã©ãšãŸã£ããåãããšããããããšãã§ããŸãã
class ClassB:
def __init__(self):
self.var_a = 'class a'
self.var_b = 'class b'
def print_a(self):
print('this method is defined in ' + self.var_a)
def print_b(self):
print('this method is defined in ' + self.var_b)
print('parent of ' + self.var_b + ' is ' + self.var_a)
ã©ãã¿ãŠããã£ã¡ã®ã»ããã·ã³ãã«ã§ããããå®éãä»åã®ãããªã¯ã©ã¹AãBã®äœ¿ãæ¹ã¯ãããŸã§ããµã³ãã«ã§ããããããå®ã³ãŒãã§ããã°èšèšãšããŠã¯ãã³ã»ã³ã¹ã§ããã§ã¯ãå ·äœçã«ã©ã®ãããªå Žåã«ç¶æ¿ã䜿ãã¡ãªãããããã®ã§ãããããããã¯äž»ã«ä»¥äžã®å ŽåãšãªããŸãã
- ãã§ã«å©çšããŠããèªåãäœã£ãæ¢åã®ã¯ã©ã¹ãç¶æ¿ããå Žå
- æšæºã©ã€ãã©ãªãã»ãã®äººãäœã£ãã¯ã©ã¹ãç¶æ¿ããå Žå
- 芪ã«å€æ°ã®åäŸãããå Žå
- GUIãå©çšããå Žå
äžèšã®ããã€ãã«ã€ããŠã¯çްãã話ãå¿ èŠãªããããã®åã§ãã¹ãŠãã«ããŒããããšã¯ã§ããŸããããã ããªããšãªãã§ããŸããªãã®ã§å šäœåãã€ããã§ããããããšèããŠããããã軜ãããããã«ã€ããŠè§£èª¬ããããšæããŸãã
ãªãããããã®ç¶æ¿ã®äœ¿ãããã¯ãã»ãã®ã¡ãžã£ãŒãªãªããžã§ã¯ãæåèšèªã§ããJavaãC++ãæèããããã§èšèŒããŠããŸããæ£çŽãªãšããPythonã®ç¶æ¿ã¯ãããã®èšèªããåçŽã§ãããå®çŸã§ããããšãããã»ã©å€ããããŸãããããããªããšPythonã§ã¯ãããªããããšãã£ã話ãåºãŠãããšã¯æããŸããããäºæ¿ãã ããã
èªåãäœã£ãæ¢åã¯ã©ã¹ãç¶æ¿
ããã¯èªåãã¡ãäœã£ãæ¢åã®ã¯ã©ã¹ããã§ã«ååšããŠããŠãããã«å€æŽã¯å ããããšã¯ã§ããªããã®ã®ã䌌ãã¯ã©ã¹ãå¿ èŠãªå Žåã«å©çšããŸãã
ããšãã°ã以äžã®å³ãèŠãŠãã ããã
ããã§ã¯ã¯ã©ã¹Aã¯ã¯ã©ã¹Cããå©çšãããŠããŸãããã®ã¯ã©ã¹Aã«æ©èœã远å ãããããå¥ã®çšéã§å©çšããããšããŸããä»åã¯ã¯ã©ã¹Dããã®å©çšãšããŸãããããã®éãã¯ã©ã¹Aèªäœã®ã³ãŒãã倿ŽããŠããŸãã®ãæã£åãæ©ãã®ã§ãããåžžã«ãããã§ãããšã¯éããŸããããã®éãã¯ã©ã¹Aã¯ããŒããããŸãŸã«ããç¶æ¿ãå©çšããŠå€æŽãå ãããšããå©ç𿹿³ããããŸãã
å人çã«ãã®äœ¿ãæ¹ã¯ããŸã奜ãã§ã¯ãªãã§ãããªããªãç¶æ¿ã§ã¯ãªããã³ã³ããžã·ã§ã³(ã¯ã©ã¹Bãã¯ã©ã¹Aãæã€)ã§å®çŸã§ããŠããŸãå Žåãå€ãããã§ããç¶æ¿ãšã³ã³ããžã·ã§ã³ã®äœ¿ãåãã®è©±ãããã«ã¯ãŸã æ©ãã®ã§ãããã¯åŸã»ã©æ¹ããŠæ±ããŸãã
æšæºã©ã€ãã©ãªãã»ãã®äººãäœã£ãã¯ã©ã¹ãç¶æ¿
ãã®äŸã¯å çšã®äŸãšäŒŒãŠããŸãããã ã倿Žã§ããªãçç±ããæšæºã©ã€ãã©ãªãã§ããããšããä»äººãäœã£ãã³ãŒããã§ããããšã«èµ·å ããŠããŸãã
ããã¯ããªã¢ãŒãã£ãºã ãšããæ©èœã«èµ·å ããŠJavaãC++ã§ã¯å€çšããããã®ã®ãPythonã§ã¯ãåã®å®£èšãããªãã®ã§ããã»ã©å©çšãããªãæ°ãããŸãããã¡ããã³ã³ããžã·ã§ã³ã§å®çŸå¯èœã§ããããªã¢ãŒãã£ãºã ã«ã€ããŠã¯4ã€ãã®å©çšæ³ã§ç޹ä»ããŸãã
ãã ããå ã®ã¯ã©ã¹ã«åããããŠããã¡ãœãããåŒã³åºããããšããç¹ãæçšãªå Žåã¯ãã³ã³ããžã·ã§ã³ã§ãã¡ãã¡ã©ãããŒã¡ãœãããå®çŸ©ããå¿ èŠããªãã®ã§äŸ¿å©ã§ãã
é£ãã話ã¯ããŠãããç°¡åãªãµã³ãã«ãæžããŠã¿ãŸããä»åã¯æšæºã©ã€ãã©ãªã®ãªã¹ããæ¡åŒµããæŽæ°ã®ã¿ãæ ŒçŽã§ããinteger_listãäœæããŠã¿ãŸãã
class IntList(list):
def __init__(self):
self.int_type = type(0)
list.__init__(self)
def append(self, elem):
if(self.int_type == type(elem)):
list.append(self, elem)
else:
print('error: "' + str(elem) + '" is not Int')
il = IntList()
il.append(3)
il.append(5)
il.append('hello')
# error: "hello" is not Int
il.append(7)
print(il[1])
# 5
print(il)
# [3, 5, 7]
print(type(il))
# <class '__main__.IntList'>
listãç¶æ¿ããŠIntListãäœæããŠããŸãããã³ã³ã¹ãã©ã¯ã¿ã«ã€ããŠã¯ç¹ã«æ©ãå¿ èŠã¯ãªããšæããŸãããappendã¡ãœããã«ã€ããŠã¯ããªãŒããŒã©ã€ãããšåŒã°ããç¶æ¿ã®ãã¯ããã¯ã䜿ã£ãŠããŸãããªãŒããŒã©ã€ãã¯åŠçãäžæžããããšãã圹å²ãããã®ã§ããã现ããããšã¯åŸã®åã«ãŠæ±ããŸãã
å©ç𿹿³ã¯listãšã»ãšãã©åãã§ããããšãããããŸããããã ãappendã¡ãœãããèªãã å Žåã®åŠçã¯ãªãªãžãã«ã®listã§ã¯ãªããIntListã§ãªãŒããŒã©ã€ãããããã®ãåŒã³åºãããŠããŸãã
ãªãä»åãç°ãªãåã¯æ ŒçŽããªããšããå®è£ ã«ããŸããããæ¬æ¥ã¯äŸå€ãæããããã«ãã¹ããããããŸããããã ãäŸå€ã«ã€ããŠã¯ãŸã åŠãã§ããªãã®ã§ãã®ãããªå®è£ ãšããŸããã
芪ã«å€æ°ã®åäŸãããå Žå
以äžã®å³ãèŠãŠãã ããã
芪ã¯ã©ã¹Graphicããåã¯ã©ã¹RectangleãTriangleãCircleãäœã£ãŠããŸãããã®ãšããRectangleãTriangleãCircleã¯å©çšè ã§ããDrawerãããããã芪ã¯ã©ã¹ã®Graphicã§ãããã®ããã«äœ¿ãããšããã®ãããªã¢ãŒãã£ãºã ã®ç¹åŸŽã§ãã
Pythonã ãšãåãšå€æ°ãçµã³ã€ããŠããªãã®ã§ã¡ãªããããããã«ããã®ã§ãããJavaãªã©ã ãšä»¥äžã®ããã«èŠªã¯ã©ã¹ã«åã¯ã©ã¹ãä»£å ¥ããããšãå¯èœã§ãã
Graphic g1 = new Rectangle();
Graphic g2 = new Triangle();
Graphic g3 = new Circle();
ãããã§ãããšäœãããããšãããšãããšãã°ä»¥äžã®ãããªã³ãŒããæžããŸãã
String style = "rectangle";
Graphic graphic = null;
if(style.equals("rectangle")){
graphic = new Rectangle();
}else if(style.equals("triangle")){
graphic = new Triangle();
}
graphic.draw();
äžèšã§ã¯äžããããstyleã®æååã«åŸã£ãŠãå©çšããã¯ã©ã¹ãRectangleãTriangleã§åãæ¿ããããŸããä»åã¯åæåæã«rectangleãšããæåãå ¥åããŠããŸã£ãŠããŸããããããããšãã°ãŠãŒã¶ãŒãäœãå ¥åãããèªã¿åã£ãããã¯ãªãã¯ããããã¿ã³ãäœã§ãã£ãããªã©ãšãã£ãåçãªæ å ±ã§ãã©ã®åã¯ã©ã¹ãå©çšãããããåãæ¿ããããšã«ãªããããããŸãããããã¡ããéçã«åã¯ã©ã¹ãæå®ããå Žåãå€ã ãããŸãã
ãããŠãå ã»ã©ã®ãªãŒããŒã©ã€ãã®äŸã«ãã£ãããã«graphic.draw()ãåŒã³åºããã¿ã€ãã³ã°ã§åã¯ã©ã¹ã«ãã£ãŠå ·äœçãªåŠçã倿Žããããšãå¯èœã§ãããŸãã芪ã¯ã©ã¹ãšããŠæ±ã£ãŠããã®ã§RectangleãTriangleã䜿ãã³ãŒããå ±æã§ãããšãã匷ã¿ããããŸãã
ãŸããããã話ããšé·ããªããããªã®ã§æ¬¡å以éã«åããããšèããŠããŸãã
GUIã®å©çšæã®ç¶æ¿
Pythonã«éããããŸããŸãªããã°ã©ãã³ã°èšèªã«ãããŠãGUIã䜿ãããã«ã¯ç¶æ¿ãå©çšãããããšãéåžžã«å€ãã§ããããã¯ç¶æ¿ãšGUIã®ä»çµã¿ã®èŠªåæ§ãéåžžã«é«ãããã ãšæãããŸãã
以äžã®å³ãèŠãŠãã ããã
ããã¯éå»ã«ã³ã©ã ã§ç޹ä»ãããç§ãäœã£ããã°è§£æçšã®ã¢ããªã±ãŒã·ã§ã³ã§ãããã¢ããªã±ãŒã·ã§ã³ãæ§æããèŠçŽ ã§ããWidgetãéå±€æ§é ã«ãªã£ãŠããã®ãããããŸãããã€ãŸãAã¯BãCãæã€ãBã¯Dãæã€ãšããæ§æãäœãããšãå¯èœã§ãã
ãŸããããã«ããWidget 1ã2ã3ã¯GUIã®ããŒãã§ãããããŠã¹ãããŒããŒãã®åããžã®å¯Ÿå¿ããç»é¢ã®åºåãªã©ã®å ±éç¹ã¯å€ãã§ãããããã®å ±éç¹ã¯èŠªã¯ã©ã¹ã§ãŸãšãããŠãããå ·äœçãªãŠã£ãžã§ããã®ç¹åŸŽãªã©ã¯åã¯ã©ã¹ã§å®çŸ©ãããŠããŸãã
å ã»ã©ã®ã芪ã«å€æ°ã®åäŸãããå Žåãã®ç¶æ¿ã®äœ¿ãæ¹ãããè€éã«ããã®ãäžè¬çãªGUIã®ã©ã€ãã©ãªã ãšæã£ãŠããã ããã°å€§äžå€«ã ãšæããŸããGUIã«ã€ããŠã¯æ¬¡å以éè©³çŽ°ã«æ±ããŸãã®ã§ãä»åã®è§£èª¬ã¯ãã®ãããã«ããŠãããããšæããŸãã
æŒç¿1
以äžã®ã¯ã©ã¹ãç¶æ¿ãããªãªãžãã«ã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹å€æ°aãããªã³ãããã¡ãœãããå®è£ ããŠãã ããã
class ClassA:
def __init__(self):
self.a = 'hello'
æŒç¿2
以äžã®ã¯ã©ã¹ãç¶æ¿ãããªãªãžãã«ã®ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹å€æ°a, bãè¶³ããå€ãããªã³ãããã¡ãœãããå®è£ ããŠãã ããããªããç¶æ¿ããã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãåŒæ°ã2ã€åãåããããã芪ã¯ã©ã¹ã®åæåã«å©çšããŠãã ããã
class ClassA:
def __init__(self, a, b):
self.a = a
self.b = b
æŒç¿3
listãç¶æ¿ããã³ã³ã¹ãã©ã¯ã¿ã«äžããåŒæ°ã®ã¿ã€ãã ãæ ŒçŽã§ãããªã¹ãã¯ã©ã¹ãäœæããŠãã ãããããšãã°
ml = MyList('a')
ãšãããšãæåååããåãåããªããªããŸãã
次åãä»åã«åŒãç¶ããç¶æ¿ã«ã€ããŠè§£èª¬ããŠãããŸãã
å·çè
玹ä»äŒè€è£äž(ITO Yuichi)ã·ã¹ã³ã·ã¹ãã ãºã§ã®æ¥åãšå€§åŠã§ã®ç 究掻åã§ã³ã³ãã¥ãŒã¿ãããã¯ãŒã¯ã«6幎é¢ãããå°éã¯L2/L3 Switching ãšããŒã¿ã»ã³ã¿ãŒé¢é£æè¡ããã³SDNãTACãšããŠã·ã¹ã³é¡§å®¢ã®ãã¯ãã«ã«ãµããŒãæ¥åã«åŸäºã瀟å åãã®ãœãããŠã§ã¢é¢é£ã®ãã¬ãŒãã³ã°ããã³ããŒã¿ã»ã³ã¿ãšSDNé¢ä¿ã®å€éšè¬æŒãªã©ãè¡ãã ããšããšä»®æ³ãããã¯ãŒã¯é¢é£æè¡ã®ç ç©¶éçºã«åŸäºããŠããããšãããããããã¯ãŒã¯ã ãã§ãªãããã°ã©ãã³ã°ãLinuxé¢é£æè¡ã«ã粟éãCisco瀟å å€åãã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°ããŒã«ã®éçºããè¶£å³ã§é³å£°åæåŠçã®ã¢ããªã±ãŒã·ã§ã³ããµãŒãã¹ãéçºã Cisco CCIE R&S, Red Hat Certified Engineer, Oracle Java Gold,2009幎床 IPA æªèžãããžã§ã¯ãæ¡æ 詳现(è±èª)ã¯ãã¡ã |
|---|



