
Pythonåºç€4ïŒã¯ã©ã¹ïŒåçŽç·šïŒ
æŠèŠ
Pythonã®ã¯ã©ã¹ã®èª¬æãšãªããŸããåçŽç·šãªã®ã¯ç§ãæªçã§ããããŸã ãŸã ã¯ã©ã¹ã¯å¥¥ãæ·±ããããšããããåçŽãšããŠãããŸãã
ããçæäºé ã
âç§ãäœæããã¯ã©ã¹ïŒæ©æ¢°åŠç¿çšããŒã¿ã»ãããèªå売買ã·ã¹ãã ïŒãããŒã¹ã«äœæããŠãããwebéçºã¬ãã«ã®å 容ãŸã§ã¯éããŠãããŸããã
âã³ãŒãã®åäœã¯åé¡ãªãã§ãããè§£éãééã£ãŠãããããããŸããã
âå€éç¶æ¿ã®ãããªè€éãªå 容ã¯é¿ããŠããŸãã
ïŒïŒçšèªã®èª¬æ
çšèªãå€ãæ··ä¹±ãããããããåèãŸã§ã«äžéšã®çšèªãèšèŒããŸããã
âã€ã³ã¹ã¿ã³ã¹ïŒã¯ã©ã¹ããäœæãããã¢ãã§ãããã¯ã©ã¹ã§å®çŸ©ãã倿°ãã¡ãœãããä¿æããŠããŸãã
âã€ã³ã¹ã¿ã³ã¹åïŒã¯ã©ã¹ãçšããŠã€ã³ã¹ã¿ã³ã¹ãäœæããåŠç
âãªããžã§ã¯ãïŒããŒã¿ãšã¡ãœãããã»ããã«ãªã£ãŠãããã®
âåºåºã¯ã©ã¹ïŒèŠªã¯ã©ã¹ïŒïŒã¯ã©ã¹ç¶æ¿æã«ç¶æ¿å ã®ã¯ã©ã¹
âã¯ã©ã¹å€æ°ïŒã¡ãœããå ã«å ¥ã£ãŠããªã倿°ïŒdef()ã®äžã®ãã€ïŒ
âçµã¿èŸŒã¿é¢æ°ïŒPythonã§æåãã䜿ãã颿°ã§ãã
â屿§ïŒã€ã³ã¹ã¿ã³ã¹å€æ°ãåŒã³åºãæã®.ã®åŸãã«ããåå
âãã³ã¬ãŒã¿ãŒïŒã¯ã©ã¹ã颿°ã«ç¹å¥ãªæ©èœã远å ããŸãã
âç¹æ®ã¡ãœããïŒ__ã§å²ãŸããŠããã¡ãœããã§ãããéåžžã®ã¡ãœãããšã¯ç°ãªãç¹å¥ãªæåãããŸãã
âã¡ãœããïŒã¯ã©ã¹ã®äžã§äœ¿çšããã颿°ãã¡ãœãããšåŒã³ãŸãã
ïŒïŒæŠå¿µå³(èªå·±æµ)
äžè¬çã«ãã¯ã©ã¹ãšã¯èšèšå³ã§ããããã®èšèšå³ãããšã«äœæãããç©ãã€ã³ã¹ã¿ã³ã¹ã§ãããããšèšãããŸããæåã¯âãªãã»ã©âãšæããŸãããããèªåã§äœã£ãŠã¿ããšããããããïŒãšãªããŸããã
èªåãªãã§è§£éãããšã倿°ãšé¢æ°ãéããŠpythonã®çµã¿èŸŒã¿é¢æ°ã䜿ãããã®ããšããçè§£ã§ããé ã®ã€ã¡ãŒãžã¯äžèšã®éãã

颿°ãšã¯ã©ã¹ã®éãã§ãããïŒå人çãªæèŠãšããŠïŒã¯ã©ã¹ã¯å€æ°ãä¿æã§ãããå°çšã®åŠçãå ¥ãããã§ããããé«åºŠãªåŠçãã§ããã®ã䟿å©ã§ãã
ïŒïŒã¡ã€ã³ã³ãŒã(Class)
説æçšã¯ã©ã¹ã§ãã説æçšã®ããã¯ã©ã¹ã®äžèº«ã«æå³ã¯ãããŸããã
[In]
import string #æåäœæçš
class Cobject:
cattr1 = 11 #ã¯ã©ã¹å€æ°
cattr2 = 22 #ã¯ã©ã¹å€æ°
@classmethod
def classfunc(cls): #ã¯ã©ã¹ã¡ãœãã
print(f'ã¯ã©ã¹ã¡ãœãããå®è¡!ã¯ã©ã¹ãªããžã§ã¯ãå©çšå¯èœ->{cls.cattr1}, {cls.cattr2}')
def __init__(self, iattr1): #åæå
print('__init__ãå®è¡!')
self.iattr1 = iattr1 #ã€ã³ã¹ã¿ã³ã¹.屿§ã§å€ãåŒã³åºãã
self.iattr2 = 100
self.iattr3 = string.ascii_lowercase #output->'abcdefghijklmnopqrstuvwxyz'
self.count = 26 #åŸã§ã€ãã¬ãŒã¿ã§äœ¿çšãã->self.iattr3ãæåæ°
def __call__(self, callattr): #ç¹æ®ã¡ãœããïŒå®è¡æã«ã¡ãœããåãäžèŠ
print(f'callã¡ãœããåã®å®è¡!{callattr}')
def function1(self, f1attr):
self.f1attr = f1attr
return self.cattr1 + f1attr #ã¯ã©ã¹å€æ°ãé ã«selfããªããšãšã©ãŒçºç
def function2(self, f2attr):
return self.f1attr + f2attr #ã¯ã©ã¹å€æ°ãé ã«selfããªããšãšã©ãŒçºç
@property
def function3(self): #ãªãŒããŒã©ã€ã詊éšçš->æ»ãå€(return)å¿
é
return self.iattr3 #output->'abcdefghijklmnopqrstuvwxyz'
def makeval(self):
for idx, word in enumerate(self.iattr3): #'abcdefghijklmnopqrstuvwxyz'ã®26æåïŒindexçªå·ãforæã§åã
setattr(self, word, idx) #ããã§idxãå€ã«æã€wordã倿°åãšããã€ã³ã¹ã¿ã³ã¹å€æ°ãã§ããã
def __len__(self): #ã€ã³ã¹ã¿ã³ã¹ãlen()ã«å
¥ããæã«æå®ã®æ°å€ãè¿
return len(self.iattr3) #ããã§ã¯äžã®æååã®é·ããè¿ãããæ°å€ã¯26(æå)ãšãªãã
def __getitem__(self, index): #ã€ã³ã¹ã¿ã³ã¹ãlen()ã«å
¥ããæã«æå®ã®æ°å€ãè¿ã
self.iattr3_list = list(self.iattr3) #æååããªã¹ãå
return self.iattr3_list[index]
def __iter__(self): #ã€ãã¬ãŒã¿ãŒèªèº«ãè¿ãã
return self
def __next__(self): #ã³ã³ããã®æ¬¡ã®èŠçŽ ãè¿ã
if self.count <=0:
raise StopIteration
self.count -= 1
return self.iattr3_list[25-self.count]ïŒïŒã¯ã©ã¹ã®è©³çŽ°èª¬æ
詳现説æãããåã ã«åŠçãããŠã©ã®ãããªåäœã«ãªããã瀺ããŸãã
ïŒïŒïŒïŒãšã©ãŒã«ãªãåŠçïŒã€ã³ã¹ã¿ã³ã¹ååïŒ
äžèšã¯ãã¹ãŠãšã©ãŒã«ãªããŸãããã®ããšããäžèšãåãããŸãã
âã€ã³ã¹ã¿ã³ã¹åããªããšã¡ãœããã¯äœ¿çšã§ããªã
ããŒïŒã¯ã©ã¹ãªããžã§ã¯ãããã¡ãœããã䜿çšã§ããªã
âã€ã³ã¹ã¿ã³ã¹åããªããšcallã¡ãœããã¯äœ¿çšã§ããªã
ããŒïŒã€ã³ã¹ã¿ã³ã¹åãšåã圢ã®ããPCãèªèã§ããªã
âã€ã³ã¹ã¿ã³ã¹åããªããšã€ã³ã¹ã¿ã³ã¹å€æ°ã¯äœ¿çšã§ããªã
ããŒïŒåæå(__init__())ããããŸã§ã¯å€æ°ãååšããªã
[In]
#Cobject.function1(5) #ã€ã³ã¹ã¿ã³ã¹ååã«ã¡ãœããã¯äœ¿ããªã->TypeError: function1() missing 1 required positional argument: 'f1attr'
#Cobject() #ã€ã³ã¹ã¿ã³ã¹åããªããšãcallã¡ãœãããšåæåãçè§£ã§ããªã->TypeError: __init__() missing 1 required positional argument: 'iattr1'
#print(Cobject.iattr1) #ã€ã³ã¹ã¿ã³ã¹å€æ°ã¯ã€ã³ã¹ã¿ã³ã¹åããªããšååšããªã->AttributeError: type object 'Cobject' has no attribute 'iattr1'ïŒïŒïŒïŒã¯ã©ã¹å€æ°ãšã¯ã©ã¹ã¡ãœãã
ã¯ã©ã¹å€æ°ãšã¯ã©ã¹ã¡ãœããã¯ã€ã³ã¹ã¿ã³ã¹ååã«äœ¿çšã§ããŸãã
[In]
print('ã¯ã©ã¹å€æ°ïŒ', Cobject.cattr1, Cobject.cattr2) #ã¯ã©ã¹å€æ°ã®ç¢ºèª
Cobject.classfunc() #ã¯ã©ã¹ã¡ãœããïŒã€ã³ã¹ã¿ã³ã¹ååã«ãå®è¡å¯èœ
[Out]
ã¯ã©ã¹å€æ°ïŒ 11 22
ã¯ã©ã¹ã¡ãœãããå®è¡!ã¯ã©ã¹ãªããžã§ã¯ãå©çšå¯èœ->11, 22ïŒïŒïŒïŒã€ã³ã¹ã¿ã³ã¹åã倿°ãã¡ãœãã
ã€ã³ã¹ã¿ã³ã¹åãããšã€ã³ã¹ã¿ã³ã¹å€æ°ããã³ã¡ãœããã䜿çšã§ããŸãããªããã€ã³ã¹ã¿ã³ã¹åæã«__init__()ã¡ãœããã¯èªåã§å®è¡ãããŸãã
[In]
ins1 = Cobject('åæåæã®å®æ°')
print('ins1.iattr1ã®å€ïŒ', ins1.iattr1) #ã€ã³ã¹ã¿ã³ã¹å€æ°ã®ç¢ºèª
ins1('callçšå€æ°ã远å ') #callã¡ãœãã
[Out]
__init__ãå®è¡!
ins1.iattr1ã®å€ïŒ åæåæã®å®æ°
callã¡ãœããåã®å®è¡!callçšå€æ°ã远å ããã¡ãœããæ»ãå€ãå¥ã¡ãœããã§äœ¿çšãããªãäºåã«ã¡ãœããå®è¡ãå¿ èŠ
[In]
# ins1.function2(100) #å
ã«æã£ãŠãããšãšã©ãŒïŒAttributeError: 'Cobject' object has no attribute 'f1attr'
ins1.function1(2) #ã¯ã©ã¹å€æ°+å
¥åå€
ins1.function2(100) #åŸã¯OK
[Out]
13
102ã¡ãœããã¯ã¡ãœããå()ã§å®è¡ããã@propertyã ãš()ãäžèŠã§ãããpropertyãã€ããã¡ãœããã®æ»ãå€ãæŽæ°ããããªã@method.setteer
[In]
print(ins1.function3) #@propertyã«ãã()ãä»ããã«åŒã³åºãã
# ins1.function3=100 #æŽæ°ã§ããããã«ããããã«ã¯@颿°å.setterãå¿
èŠïŒãšã©ãŒïŒAttributeError: can't set attribute
[Out]
abcdefghijklmnopqrstuvwxyzïŒïŒïŒïŒçµã¿èŸŒã¿é¢æ°(setattr(), getattr())
ã¯ã©ã¹ã«ã€ãã¬ãŒã¿ãæž¡ããŠã€ã³ã¹ã¿ã³ã¹å€æ°ãäœæãããªãsetattr()ãå€ãååŸãããªãgetattr()ãåé€ãªãdelattr()ã§åŠçå¯èœã
[In]
ins1.makeval() #setatterã䜿çšããŠã€ã³ã¹ã¿ã³ã¹å€æ°ãäœæ->a~zã®å±æ§ã«å¯ŸããŠ0~25ã®æŽæ°ãäžããããŠãã
print(ins1.a, ins1.c, ins1.t, ins1.z) #é©åœãªå±æ§ãäžããŠå€ãååŸ
print(getattr(ins1,'a'), getattr(ins1,'c'), getattr(ins1,'t'), getattr(ins1,'z')) #åäžâ»getattr(ã€ã³ã¹ã¿ã³ã¹, 屿§)ã§ååŸ
delattr(ins1, 'a') #ã€ã³ã¹ã¿ã³ã¹å€æ°ãåé€
print(ins1.a) #äžã§åé€ãããããšã©ãŒçºç
[Out]
0 2 19 25
0 2 19 25
AttributeError: 'Cobject' object has no attribute 'a'ïŒïŒïŒïŒç¹æ®ã¡ãœããïŒ__init__, __call__以å€ïŒ
ã€ã³ã¹ã¿ã³ã¹ã«äžèšã®ãããªåŠçãããå Žåã«äœ¿çšïŒäžéšæªç޹ä»ïŒ
ãã€ã³ã¹ã¿ã³ã¹(以äžins)ãžã®è¿œå åäœã
â__len__(self)ïŒlen(ins)ã§è¿ãå€->é·ããèšå®ã§ããã
â__getitem__(self)ïŒins[key]ã§å€ãååŸã§ãã->èŸæžã®ããã«æ±ãã
â__iter__(self), __next__(self)ïŒã€ãã¬ãŒã¿ãšããŠæ±ãã->foræã§åãã
â__str(self)__ïŒprint(ins)ã®åºåå€ã決ãããã->printæã§äžèº«ãèŠãã
â__repr(self)__ïŒãªããžã§ã¯ãåã®ã¿å ¥åããæã®åºåå€ã決ãããã
â__add__(self)ïŒã€ã³ã¹ã¿ã³ã¹ã®è¶³ãç®ã®åºåãæ±ºãã(åå·®åç©ããã)
äžéšã®çµæã¯äžèšã®éã
[In]
print('æåæ°ãæ°å€ã«åã£ãŠãããã26ãè¿ã->', len(ins1))
print([ins1[i] for i in range(6)]) #__getitem__ã䜿çšããããšã§èŸæžã®ãããªåœ¢ã§ã€ã³ã¹ã¿ã³ã¹ããå€ãååŸããããšãã§ããã
print([i for i in ins1]) #__iter__ãš__next__ãçµã¿åãããããšã§ã€ã³ã¹ã¿ã³ã¹ãã€ãã¬ãŒã¿ãŒãšããŠäœ¿çšå¯èœã§ããã
print([i for i in ins1]) #ã€ãã¬ãŒã¿ãŒãæ¶è²»ããããã2åç®ã§ã¯ç©ºã®å€ãåºåãããã->åå©çšããå Žåã¯ã¯ã©ã¹ã2ã€ã«åå²ãã
[Out]
æåæ°ãæ°å€ã«åã£ãŠãããã26ãè¿ã-> 26
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
[]ãªããã¯ã©ã¹ãªããžã§ã¯ãã¯ç¹æ®ã¡ãœãããæãŠãªãïŒïŒãšæãã
[In]
print('æåæ°ãæ°å€ã«åã£ãŠãããã26ãè¿ã->', len(Cobject))
[Out]
TypeError: object of type 'type' has no len()ïŒïŒç¶æ¿
芪ã¯ã©ã¹ã®å€æ°ãã¡ãœãããšåããã®ãåŒãç¶ãã§æ°ããã¯ã©ã¹ãäœæããããšãç¶æ¿ãšèšããŸããããŒã¹ã®ã¯ã©ã¹ã ãäœæããŠãããŠæ©èœã远å ããæã«äœ¿çšããŸã(Pytorchã®nn.Moduleãªã©)ã
ïŒïŒïŒïŒç¶æ¿ãã¹ãïŒïŒé¢æ°è¿œå ãã¡ãœããã®ç¶æ¿
ãã®ãŸãŸç¶æ¿ããŠïŒã€ã¡ãœãã远å ããŠã¿ãŸãããæ°èŠã¯ã©ã¹å ã§èŠªã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãå Žåã¯super()ãã€ããŸããçµæãšããŠäžèšã確èªã§ããŸããã
â芪ã¯ã©ã¹ã®å€æ°ãã¡ãœããã¯ãã®ãŸãŸäœ¿çšå¯èœ
âsuper().methodã§èŠªã¯ã©ã¹ã®ã¡ãœããã®æ»ãå€ãååŸã§ãã
â芪ã¯ã©ã¹ãšåãã¡ãœããåã远å ãããšåã¯ã©ã¹ã®ã¡ãœãããåªå
[In]
class Overrideobj(Cobject): #ã¯ã©ã¹å(åºåºã¯ã©ã¹å)
def addfunc(self, x):
print(f'ãªãŒããŒã©ã€ãããã¯ã©ã¹ã®ã¡ãœãã->倿°{x}')
def function2(self):
print('function2ã¡ãœããã¯ãªãŒããŒã©ã€ãããŸããã')
def makeupperval(self):
lowercases = super().function3 #åºåºã¯ã©ã¹ã®ã¡ãœãããåŒã³åºãããå Žåã¯super()ãã€ãã
return lowercases.upper() #function3ã¯propertyã«ãããã()ã¯äžèŠ
#ã€ã³ã¹ã¿ã³ã¹ååïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒ
print('ã¯ã©ã¹å€æ°ïŒ', Overrideobj.cattr1, Overrideobj.cattr2) #ã¯ã©ã¹å€æ°ã®ç¢ºèª
Overrideobj.classfunc() #ã¯ã©ã¹ã¡ãœããïŒã€ã³ã¹ã¿ã³ã¹ååã«ãå®è¡å¯èœ
print('*'*100) #åŠçæã«ç·ãå
¥ããã ã
#ã€ã³ã¹ã¿ã³ã¹åïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒïŒ
ins2 = Overrideobj('åæåæã®å®æ°')
print('ins2.iattr1ã®å€ïŒ', ins2.iattr1)
ins2('Overrideã§callã¡ãœãã') #callã¡ãœãã
print(ins2.function1(2)) #å
ã®ã¡ãœããã䜿çšå¯èœ
ins2.function2()
# print(ins2.function2(100)) #TypeError: function2() takes 1 positional argument but 2 were given
print(ins2.makeupperval()) #super()ã§åºåºã¯ã©ã¹(芪ã¯ã©ã¹)ããç¶æ¿ããŠä¿®æ£ããçµæãåºå
#ç¹æ®ã¡ãœããã®ç¢ºèª
print('æåæ°ãæ°å€ã«åã£ãŠãããã26ãè¿ã->', len(ins2))
# print('æåæ°ãæ°å€ã«åã£ãŠãããã26ãè¿ã->', len(Overrideobj)) #ã¯ã©ã¹ãªããžã§ã¯ãã¯ãšã©ãŒïŒTypeError: object of type 'type' has no len()
print([ins2[i] for i in range(6)]) #__getitem__ã䜿çšããããšã§èŸæžã®ãããªåœ¢ã§ã€ã³ã¹ã¿ã³ã¹ããå€ãååŸããããšãã§ããã
print([i for i in ins2]) #__iter__ãš__next__ãçµã¿åãããããšã§ã€ã³ã¹ã¿ã³ã¹ãã€ãã¬ãŒã¿ãŒãšããŠäœ¿çšå¯èœã§ããã
print([i for i in ins2]) #ã€ãã¬ãŒã¿ãŒãæ¶è²»ããããã2åç®ã§ã¯ç©ºã®å€ãåºåãããã->åå©çšããå Žåã¯ã¯ã©ã¹ã2ã€ã«åå²ãã[Out]
ã¯ã©ã¹å€æ°ïŒ 11 22
ã¯ã©ã¹ã¡ãœãããå®è¡!ã¯ã©ã¹ãªããžã§ã¯ãå©çšå¯èœ->11, 22
****************************************************************************************************
__init__ãå®è¡!
ins2.iattr1ã®å€ïŒ åæåæã®å®æ°
callã¡ãœããåã®å®è¡!Overrideã§callã¡ãœãã
13
function2ã¡ãœããã¯ãªãŒããŒã©ã€ãããŸããã
ABCDEFGHIJKLMNOPQRSTUVWXYZ
æåæ°ãæ°å€ã«åã£ãŠãããã26ãè¿ã-> 26
['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
[]ïŒãŒïŒïŒç¶æ¿ãã¹ã2ïŒ__init__()ã®æ±ã
çµæã®ãŸãšããšã³ãŒãã¯äžèšã®éã
â__init__(self)ãç¶æ¿ããåæåãããšèŠªã¯ã©ã¹ã®__init__(self)ãæ¶ããã
â__init__(self)ãç¶æ¿ããåæåãããšèŠªã¯ã©ã¹ã®åŒæ°ä»¥å€ã®å€æ°ãæ¶ããã
â__init__(self)ãç¶æ¿ãããšèŠªã¯ã©ã¹ã®åŒæ°ã»å€æ°ã䜿çšã§ããã
[In]
class Overrideobj2(Cobject): #ã¯ã©ã¹å(åºåºã¯ã©ã¹å)
def __init__(self, newattr):
self.newattr = newattr
ins3 = Overrideobj2(999)
print(ins3.newattr)
print(ins3.iattr1)
print(ins3.iattr2, ins3.iattr3, ins3.count)
[Out]
999
AttributeError: 'Overrideobj2' object has no attribute 'iattr1'
AttributeError: 'Overrideobj2' object has no attribute 'iattr2'[In]
class Overrideobj3(Cobject): #ã¯ã©ã¹å(åºåºã¯ã©ã¹å)
def __init__(self, iattr1, newattr):
super().__init__(iattr1)
self.newattr = newattr
ins3 = Overrideobj3('iaatr1çšã®åŒæ°', 777)
print(ins3.newattr)
print(ins3.iattr1, ins3.iattr2, ins3.iattr3, ins3.count)
[Out]
__init__ãå®è¡!
777
iaatr1çšã®åŒæ° 100 abcdefghijklmnopqrstuvwxyz 26åèè³æ
ããšãã
èªåãäœããããã®ãå匷ããæã¯ã©ã¹ãã©ããŸã§çè§£ããªããšãããªãããããããªãã®ãç¬åŠã®èŸãããã»ã»ã»
ããšãããã°ã©ãã³ã°ã®å匷ãããšç¥ããªãåèªãç¥ããªãåèªã§èª¬æãããã«ãŒããå€ãããæ¬åœã«çè§£ãé£ããã