ããã¯ãRafe Kettlerã«ãã
ããã¥ã¢ã«ã® 1.17ããŒãžã§ã³ã®ç¿»èš³ã§ãã
å
容
- ãšã³ããªãŒ
- èšèšãšåæå
- ä»»æã®ã¯ã©ã¹ã®æŒç®åããªãŒããŒã©ã€ããã
- ã¯ã©ã¹ã®ãã¬ãŒã³ããŒã·ã§ã³
- å±æ§ã¢ã¯ã»ã¹å¶åŸ¡
- ã«ã¹ã¿ã ã·ãŒã±ã³ã¹ãäœæãã
- åå°
- åŒã³åºããããªããžã§ã¯ã
- ã³ã³ããã¹ããããŒãžã£ãŒ
- æœè±¡åºæ¬ã¯ã©ã¹
- èšè¿°åã®æ§ç¯
- ã³ããŒ
- ãªããžã§ã¯ãã§pickleã¢ãžã¥ãŒã«ã䜿çšãã
- ãããã«
- ä»é²1ïŒããžãã¯ã¡ãœããã®åŒã³åºãæ¹æ³
- ä»é²2ïŒPython 3ã®å€æŽ
ãšã³ããªãŒ
éæ³ã®æ¹æ³ãšã¯äœã§ããïŒ ãããã¯ãã¹ãŠãªããžã§ã¯ãæåPythonã§ãã ãããã¯ãã¯ã©ã¹ã«ãéæ³ããè¿œå ã§ããç¹å¥ãªã¡ãœããã§ãã ãããã¯åžžã«2ã€ã®ã¢ã³ããŒã¹ã³ã¢ã§å²ãŸããŠããŸãïŒããšãã°ã
__lt__
ãŸãã¯
__lt__
ïŒã ãŸããç§ãã¡ãæãã»ã©ææžåãããŠããŸããã ãã¹ãŠã®ããžãã¯ã¡ãœããã¯ããã¥ã¡ã³ãã«èšèŒãããŠããŸãããéåžžã«ã©ã³ãã ã§ãã»ãšãã©çµç¹åãããŠããŸããã ãããã£ãŠãPythonã®ããã¥ã¡ã³ãããªããšç§ãæããŠãããã®ãä¿®æ£ããããã«ãç解ããããèšèªã§èšè¿°ãããäŸãè±å¯ã«æäŸãããŠããããžãã¯ã¡ãœããã«é¢ãã詳现æ
å ±ãæäŸããŸãã ãã®ã¬ã€ããã楜ãã¿ãã ããã ãã¬ãŒãã³ã°è³æãã¡ã¢ããŸãã¯è©³çŽ°ãªèª¬æãšããŠäœ¿çšããŸãã ç§ã¯éæ³ã®æ¹æ³ãã§ããã ãæ確ã«èª¬æããããšããŸããã
èšèšãšåæåã
誰ããæãåºæ¬çãªéæ³ã®ã¡ãœãã
__init__
ç¥ã£ãŠããŸãã ããã«ããããªããžã§ã¯ããåæåã§ããŸãã ãã ãã
x = SomeClass()
ãšæžããšã
__init__
æåã«åŒã³åºããããã®ã§
__init__
ãŸããã å®éããªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ã
__new__
ã¡ãœãããäœæããåŒæ°ãåæååã«æž¡ãããŸãã ãªããžã§ã¯ãã®ã©ã€ããµã€ã¯ã«ã®ããäžæ¹ã®ç«¯ã¯
__del__
ã¡ãœããã§ãã ããã3ã€ã®éæ³ã®æ¹æ³ã詳ããèŠãŠã¿ãŸãããã
__new__(cls, [...)
ããã¯ããªããžã§ã¯ããåæåããããšãã«åŒã³åºãããæåã®ã¡ãœããã§ãã ã¯ã©ã¹ããã©ã¡ãŒã¿ãŒãšããŠåãåãããã®åŸ__init__
ã«æž¡ãããä»ã®åŒæ°ãåãåããŸãã __new__
ã»ãšãã©äœ¿çšãããŸããããç¹ã«ã¯ã©ã¹ãã¿ãã«ãæååãªã©ã®äžå€ã®åããç¶æ¿ãããå Žåã«äŸ¿å©ã§ãã __new__
ã__new__
ããã€ããã¯ãããŸããããªããªãããããé »ç¹ã«å¿
èŠã«ãªãããã§ã¯ãªãããã§ãããããããã®æ¹æ³ã¯ãšãŠãããã§ããŠããã ããã¥ã¡ã³ãã§è©³ãã説æãããŠããŸã ã
__init__(self, [...)
ã¯ã©ã¹åæååã å
ã®ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããããã®ã¯ãã¹ãŠæž¡ãããŸãïŒããšãã°ã x = SomeClass(10, 'foo')
ãåŒã³åºããšã __init__
åŒæ°ãšããŠ10
ãš'foo'
ãåãåããŸã__init__
ã¯ã©ã¹ãå®çŸ©ãããšãã«ã»ãŒæ®éçã«äœ¿çšãããŸãã
__del__(self)
__new__
ãš__init__
ãªããžã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã圢æããå Žåã __del__
ã¯ãã®ãã¹ãã©ã¯ã¿ãŒã§ãã del x
åŒã®åäœãå®çŸ©ããŸããïŒãããã£ãŠããã®ã³ãŒãã¯x.__del__()
ãšåçã§ã¯ãããŸããïŒã ãããããªããžã§ã¯ããã¬ããŒãžã³ã¬ã¯ã¿ãŒã«å
¥ã£ããšãã®ãªããžã§ã¯ãã®åäœã決å®ããŸãã ããã¯ããœã±ããããã¡ã€ã«ãªããžã§ã¯ããªã©ãåé€äžã«è¿œå ã®ã¯ãªãŒã³ã¢ãããå¿
èŠãšããå¯èœæ§ããããªããžã§ã¯ãã«ãšã£ãŠéåžžã«äŸ¿å©ã§ãã ãã ããã€ã³ã¿ãŒããªã¿ãŒãã·ã£ããããŠã³ããŠããªããžã§ã¯ããåç¶ããŠããå Žåã¯__del__
ãåŒã³åºãããä¿èšŒããªãããã泚æãå¿
èŠã§ãã ãã®ããã __del__
ã¯ãåªããããã°ã©ãã³ã°ãã©ã¯ãã£ã¹ã®ä»£æ¿ãšããŠæ©èœããããšã¯ã§ããŸããïŒæ¥ç¶ã®åŠçãçµäºããå Žåãªã©ã¯ãåžžã«æ¥ç¶ãçµäºããŸãïŒã å®éãåŒã³åºãä¿èšŒããªãããã __del__
ã¯ã»ãšãã©äœ¿çšããªãã§ãã ããã 泚æããŠäœ¿çšããŠãã ããïŒ
翻蚳è
ããã®æ³šæïŒ svetlov 㯠ãèè
ãããã§ééããããŠããããšã«__del__
ããŸããå®éãéèš³ã®å®äºæã«__del__
åžžã«åŒã³åºãããŸãã
ããããã¹ãŠãŸãšãããšãããã«
__init__
ãš
__del__
ãåäœããäŸããã
__del__
ïŒ
from os.path import join class FileObject: ''' , , .''' def __init__(self, filepath='~', filename='sample.txt'):
ä»»æã®ã¯ã©ã¹ã®æŒç®åããªãŒããŒã©ã€ããã
Pythonã§ããžãã¯ã¡ãœããã䜿çšããããšã®å€§ããªå©ç¹ã®1ã€ã¯ãçµã¿èŸŒã¿ã¡ãœãããšåãããã«ãªããžã§ã¯ããåäœãããç°¡åãªæ¹æ³ãæäŸããããšã§ãã ããã¯ãããŒã¹æŒç®åã®éå±ã§éè«ççãªéæšæºã®åäœãåé¿ã§ããããšãæå³ããŸãã äžéšã®èšèªã§ã¯ã次ã®ãããªèšè¿°ãäžè¬çã§ãã
if instance.equals(other_instance):
ãã¡ãããPythonã§ãåãããšãã§ããŸãããããã«ããæ··ä¹±ãšäžå¿
èŠãªåé·æ§ãè¿œå ãããŸãã ç°ãªãã©ã€ãã©ãªãŒã¯åãæäœãç°ãªãæ¹æ³ã§åŒã³åºãããããã䜿çšããããã°ã©ããŒã«å¿
èŠä»¥äžã®ã¢ã¯ã·ã§ã³ãå®è¡ãããŸãã ããžãã¯ã¡ãœããã®åã䜿çšããŠãç®çã®ã¡ãœããïŒãã®å Žåã¯
__eq__
ïŒã決å®ãã
念é ã«çœ®ãããã®ãæ£ç¢ºã«è¡šçŸã§ã
ãŸã ã
if instance == other_instance:
ããã¯ãéæ³ã®æ¹æ³ã®é·æã®1ã€ã§ãã ãããã®å€§éšåã¯ãæšæºæŒç®åãäœããããã決å®ã§ãããããçµã¿èŸŒã¿åã§ãããã®ããã«ã¯ã©ã¹ã§æŒç®åã䜿çšã§ããŸãã
éæ³ã®æ¯èŒæ¹æ³
Pythonã«ã¯ãäžåšçšãªã¡ãœããã§ã¯ãªããæŒç®åã䜿çšããŠãªããžã§ã¯ãéã®çŽæçãªæ¯èŒãå®çŸ©ããããã«èšèšãããå€æ°ã®ããžãã¯ã¡ãœããããããŸãã ããã«ãPythonã®ããã©ã«ãã®åäœããªãŒããŒã©ã€ãããŠãªããžã§ã¯ããæ¯èŒããæ¹æ³ãæäŸããŸãïŒåç
§ã«ããïŒã ãããã®ã¡ãœãããšãã®æ©èœã®ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
__cmp__(self, other)
æãåºæ¬çãªæ¯èŒæ¹æ³ã å®éã«ã¯ããã¹ãŠã®æ¯èŒæŒç®åïŒ>ã== ã! =ããªã©ïŒã®åäœã決å®ããŸãããå¿
ãããå¿
èŠãªæ¹æ³ã§ã¯ãããŸããïŒããšãã°ã2ã€ã®ã€ã³ã¹ã¿ã³ã¹ã®ç䟡æ§ã1ã€ã®åºæºã«ãã£ãŠæ±ºå®ãããããä»ã®ããã«å¥ã®ïŒã __cmp__
ã¯ã self < other
å Žåã¯è² ã®æ°ã self == other
å Žåã¯ãŒãã self > other
å Žåã¯æ£ã®æ°ãè¿ããŸãã ãã ããéåžžã¯ããã¹ãŠã__cmp__
å®çŸ©ããããããå¿
èŠãªåæ¯èŒãå®çŸ©ããæ¹ã__cmp__
ã§ãã ãã ãã __cmp__
ã¯ãå¿
èŠãªãã¹ãŠã®æ¯èŒãåãåºæºã§å®è¡ãããå Žåã«ãç¹°ãè¿ããé¿ããæå¿«ããé«ããè¯ãæ¹æ³ã§ãã
__eq__(self, other)
çå·æŒç®å==
ã®åäœãå®çŸ©ããŸãã
__ne__(self, other)
äžçåŒæŒç®åã®åäœãå®çŸ©ããŸã!!
__lt__(self, other)
æŒç®åã®åäœãå®çŸ©ããŸãless <
__gt__(self, other)
æŒç®åmoreã®åäœ>
ãå®çŸ©ããŸãã
__le__(self, other)
<=
以äžã®æŒç®åã®åäœãå®çŸ©ããŸãã
__ge__(self, other)
>=
以äžã®æŒç®åã®åäœãå®çŸ©ããŸãã
ããšãã°ãåèªã説æããã¯ã©ã¹ãèããŸãã åèªãèŸæžé ïŒã¢ã«ãã¡ãããé ïŒã§æ¯èŒã§ããŸããããã¯æååãæ¯èŒãããšãã®ããã©ã«ãã®åäœã§ãããæ¯èŒãããšãã¯ãé³ç¯ã®é·ããæ°ãªã©ãä»ã®åºæºã䜿çšããããšãã§ããŸãã ãã®äŸã§ã¯ãé·ããæ¯èŒããŸãã å®è£
ã¯æ¬¡ã®ãšããã§ãã
class Word(str): ''' , .''' def __new__(cls, word):
ããã§ã2ã€ã®
Word
ïŒ
Word('foo')
ãš
Word('bar')
ïŒãäœæããé·ããæ¯èŒã§ããŸãã
__eq__
ãš
__ne__
å®çŸ©ããŠããªãããšã«æ³šæããŠãã ããããã
__ne__
ãå¥åŠãªåäœãçºçããŸãïŒããšãã°ã
Word('foo') == Word('bar')
ã¯trueãšèŠãªãããŸãïŒã é·ãã«åºã¥ããŠç䟡æ§ããã¹ãããå Žåãããã¯æå³ããªããªããããæšæºã®ç䟡æ§ãã¹ãã¯
str
ããæ®ã
str
ã
ããŠããã¹ãŠã®æ¯èŒãå®å
šã«ã«ããŒããããã«ãããããã®æ¯èŒã®éæ³ã®æ¹æ³ãå®çŸ©ããå¿
èŠã¯ãªãããšãèšåããè¯ãæ©äŒã®ããã§ãã æšæºã©ã€ãã©ãªã¯
functools
ã¢ãžã¥ãŒã«ã«ãã³ã¬ãŒã¿ãŒã¯ã©ã¹ãæäŸããŸããããã«ããããã¹ãŠã®æ¯èŒã¡ãœããã決å®ãããŸã
__eq__
1ã€ïŒ
__gt__
ã
__lt__
ãªã©ïŒã®ã¿ãå®çŸ©ããã°ååã§ãããã®æ©èœã¯Pythonã®ããŒãžã§ã³2.7以éã§äœ¿çšå¯èœã§ããããªãã¯æºè¶³ããŠããŸããããªãã¯å€ãã®æéãšåŽåãç¯çŽããŸãã æå¹ã«ããã«ã¯ãã¯ã©ã¹å®çŸ©ã«
@total_ordering
ããŸãã
æ°å€éæ³æ³
æ¯èŒæŒç®åã«ãã£ãŠãªããžã§ã¯ãã®æ¯èŒæ¹æ³ã決å®ã§ããããã«ãæ°å€æŒç®åã®åäœãå®çŸ©ã§ããŸãã æºåãããªãããå人ããããã®å€ãããããŸãã ããè¯ãæ§æã®ããã«ãæ°å€ããžãã¯ã¡ãœããã5ã€ã®ã«ããŽãªã«åé¡ããŸãããåé
æŒç®åãéåžžã®ç®è¡æŒç®åãåå°ç®è¡æŒç®åïŒåŸã§è©³ãã説æããŸãïŒãè€å代å
¥ãããã³åå€æã§ãã
åé
æŒç®åãšé¢æ°
åé
æŒç®åããã³é¢æ°ã«ã¯ãåŠå®ã絶察å€ãªã©ã®ãªãã©ã³ãã1ã€ã ããããŸãã
__pos__(self)
åé
ãã©ã¹ïŒ +some_object
ïŒã®åäœãå®çŸ©ããŸã
__neg__(self)
åŠå®åäœãå®çŸ©ããŸãïŒ -some_object
ïŒ
__abs__(self)
abs()
çµã¿èŸŒã¿é¢æ°ã®åäœãå®çŸ©ããŸãã
__invert__(self)
~
æŒç®åã«ãã£ãŠå転ãããåäœãå®çŸ©ããŸãã 圌ããã£ãŠããããšã®èª¬æã«ã€ããŠã¯ãäºé
æŒç®åã«é¢ãããŠã£ãããã£ã¢ã®èšäºãåç
§ããŠãã ããã
__round__(self, n)
çµã¿èŸŒã¿ã®round()
é¢æ°ã®åäœãå®çŸ©ããŸãã n
ã¯ãäžžããå°æ°ç¹ä»¥äžã®æ¡æ°ã§ãã
__floor__(self)
math.floor()
åäœãå®çŸ©ããŸããã€ãŸããæãè¿ãå°ããæŽæ°ã«äžžããŸãã
__ceil__(self)
math.ceil()
åäœãå®çŸ©ããŸããã€ãŸããæãè¿ãæŽæ°ã«äžžããŸãã
__trunc__(self)
math.trunc()
åäœãã€ãŸãæŽæ°ãžã®ããªãã³ã°ãå®çŸ©ããŸãã
äžè¬çãªç®è¡æŒç®å
ããã§ãéåžžã®2é
æŒç®åïŒããã³ããã«2ã3ã®é¢æ°ïŒã+ã-ã*ãããã³åæ§ã®ãã®ãæ€èšããŸãã 圌ãã¯ãã»ãšãã©ã®å Žåãèªåèªèº«ãå®å
šã«èª¬æããŠããŸãã
__add__(self, other)
è¿œå ã
__sub__(self, other)
æžç®
__mul__(self, other)
ä¹ç®
__floordiv__(self, other)
æŽæ°é€ç®ãæŒç®å//
__div__(self, other)
éšéãæŒç®åã
__truediv__(self, other)
æ£ããéšéã from __future__ import division
ããå Žåã«ã®ã¿æ©èœããããšã«æ³šæããŠãã ããã
__mod__(self, other)
é€ç®æŒç®å%
ã®æ®ãã
__divmod__(self, other)
çµã¿èŸŒã¿ã®divmod()
é¢æ°ã®åäœãå®çŸ©ããŸãã
__pow__
æ¡åŒµãæŒç®å**
ã
__lshift__(self, other)
ãã€ããªå·Šã·ãããæŒç®å<<
__rshift__(self, other)
å³ãžã®ãã€ããªã·ãããæŒç®å>>
__and__(self, other)
ãã€ããªANDã &
æŒç®åã
__or__(self, other)
ãã€ããªORæŒç®å|
ã
__xor__(self, other)
ãã€ããªxorãæŒç®å^
åæ ãããç®è¡æŒç®å
ç§ããã詳现ã«åæ ãããç®è¡ã«å°å¿µããã€ããã ãšèšã£ãããšãèŠããŠããŸããïŒ ããã¯ããçš®ã®å€§ãããŠæããããŠç解ã§ããªãæŠå¿µã ãšæããããããŸããã å®éããã¹ãŠãéåžžã«ç°¡åã§ãã 以äžã«äŸã瀺ããŸãã
some_object + other
ããã¯ãéåžžã®ãè¿œå ã§ãã åçã®åå°åŒã®å¯äžã®éãã¯ãçšèªã®é åºã§ãïŒ
other + some_object
ãããã£ãŠããããã®éæ³ã®ã¡ãœããã¯ãã¹ãŠãéåžžã®ããŒãžã§ã³ãšåãããã«åäœããŸããã第1ãªãã©ã³ããšããŠ
other
ãã第2ãªãã©ã³ããšããŠ
self
ã䜿çšããŠæäœãå®è¡ããŸãã ã»ãšãã©ã®å Žåãåæ ãããæäœã®çµæã¯éåžžã®åçã®çµæãšåãã§ããããã
__radd__
ãå®çŸ©ãããšãã«
__radd__
åŒã³åºãã«å¶éããããšãã§ããŸãã æŒç®åã®å·ŠåŽã®ãªããžã§ã¯ãïŒãã®äŸã§ã¯
other
ïŒã«ã¯ããã®ã¡ãœããã®éåžžã®ç¡åå°ããŒãžã§ã³ã䜿çšããªãã§ãã ããã ãã®äŸã§ã¯ã
some_object.__radd__
ã
__add__
å®çŸ©ãããŠããªãå Žåã«ã®ã¿
some_object.__radd__
ãåŒã³åºãããŸãã
__radd__(self, other)
åæ ãããè¿œå ã
__rsub__(self, other)
åæ ãããæžç®ã
__rmul__(self, other)
åæ ãããä¹ç®ã
__rfloordiv__(self, other)
æŽæ°ã®é€ç®ãæŒç®å//
ã
__rdiv__(self, other)
åå°éšéããªãã¬ãŒã¿ãŒã
__rtruediv__(self, other)
æ£ããé€ç®ãåæ ããŸããã from __future__ import division
ããå Žåã«ã®ã¿æ©èœããããšã«æ³šæããŠãã ããã
__rmod__(self, other)
é€ç®ã®äœããæŒç®å%
åæ ã
__rdivmod__(self, other)
divmod(other, self)
åŒã³åºããããšãã®divmod(other, self)
divmod()
é¢æ°ã®åäœãå®çŸ©ããŸãã
__rpow__
èåãžã®æšé«ã®åæ ãæŒç®å**
ã
__rlshift__(self, other)
ãã€ããªå·Šã·ãããæŒç®å<<
ã
__rrshift__(self, other)
å³ãžã®ãã€ããªã·ããã®åæ ãæŒç®å>>
ã
__rand__(self, other)
åæ ããããã€ããªANDã &
æŒç®åã
__ror__(self, other)
åæ ããããã€ããªORæŒç®å|
ã
__rxor__(self, other)
åå°ãã€ããªxorãæŒç®å^
ã
è€åå²ãåœãŠ
Pythonã§ã¯ãè€å代å
¥ã®ããžãã¯ã¡ãœãããåºãè¡šçŸãããŠããŸãã ã»ãšãã©ã®å Žåããã§ã«è€åå²ãåœãŠã«ç²ŸéããŠããå¯èœæ§ãé«ããããã¯ãéåžžã®ãæŒç®åãšå²ãåœãŠã®çµã¿åããã§ãã ããã§ãäžæãªå Žåã¯ã次ã®äŸãã芧ãã ããã
x = 5 x += 1
ãããã®åã¡ãœããã¯ãå·ŠåŽã®å€æ°ã«å²ãåœãŠãããå€ãè¿ãå¿
èŠããããŸãïŒããšãã°ã
a += b
å Žåã
__iadd__
ã¯
a + b
ã«å²ãåœãŠããã
a + b
ãè¿ãå¿
èŠããããŸãïŒã ãªã¹ãã¯æ¬¡ã®ãšããã§ãã
__iadd__(self, other)
å²ãåœãŠã䌎ãå²ãåœãŠã
__isub__(self, other)
代å
¥ã«ããæžç®ã
__imul__(self, other)
å²ãåœãŠã®ä¹ç®ã
__ifloordiv__(self, other)
代å
¥ã«ããæŽæ°é€ç®ãæŒç®å//=
ã
__idiv__(self, other)
代å
¥ã«ããé€ç®ãæŒç®å/=
ã
__itruediv__(self, other)
å²ãåœãŠã®ããåå²ãä¿®æ£ããŸãã from __future__ import division
ããå Žåã«ã®ã¿æ©èœããããšã«æ³šæããŠãã ããã
__imod_(self, other)
å²ãåœãŠé€ç®ã®æ®ããæŒç®å%=
ã
__ipow__
代å
¥ã䜿çšããŠã¹ãããã«æ¡åŒµãæŒç®å**=
ã
__ilshift__(self, other)
代å
¥ã䌎ããã€ããªå·Šã·ãããæŒç®å<<=
ã
__irshift__(self, other)
å²ãåœãŠã䌎ããã€ããªå³ã·ãããæŒç®å>>=
ã
__iand__(self, other)
代å
¥ãšæŒç®åAND &=
ãã€ããªANDã
__ior__(self, other)
代å
¥ã䌎ããã€ããªORãæŒç®å|=
ã
__ixor__(self, other)
代å
¥ã䌎ããã€ããªxorãæŒç®å^=
ã
åå€æããžãã¯ã¡ãœãã
ããã«ãPythonã«ã¯ã
float()
ãªã©ã®çµã¿èŸŒã¿åå€æé¢æ°ã®åäœãå®çŸ©ããããã®å€ãã®éæ³ã®ã¡ãœããããããŸãã ããã«ãããŸãïŒ
__int__(self)
intãžã®åå€æã
__long__(self)
longãžã®åå€æã
__float__(self)
floatãžã®åå€æã
__complex__(self)
åãè€çŽ æ°ã«å€æããŸãã
__oct__(self)
åã8é²æ°ã«å€æããŸãã
__hex__(self)
åã16é²æ°ã«å€æããŸãã
__index__(self)
ãªããžã§ã¯ããã¹ã©ã€ã¹ïŒ[startïŒstopïŒstep]ã®åœ¢åŒã®åŒïŒã§äœ¿çšãããå Žåãåãintã«å€æããŸãã ãªã¹ãã€ã³ããã¯ã¹ãšããŠäœ¿çšã§ããæ°å€ã¿ã€ããå®çŸ©ããå Žåã¯ã __index__
å®çŸ©ããå¿
èŠããããŸãã
__trunc__(self)
math.trunc(self)
åŒã³åºãããŸãã æŽæ°åïŒéåžžã¯é·ãïŒã«åãæšãŠãããå€ãè¿ãå¿
èŠããããŸãã
__coerce__(self, other)
ç°ãªãã¿ã€ãã®ãªãã©ã³ãã䜿çšããŠç®è¡ãå®è£
ããæ¹æ³ã ã¿ã€ãå€æãäžå¯èœãªå Žåã __coerce__
ã¯None
ãè¿ããŸãã å€æãå¯èœãªå Žåã¯ã self
ãšother
ããåãåã«å€æããããã¢ïŒ2ã€ã®èŠçŽ ã®ã¿ãã«ïŒãè¿ãå¿
èŠããããŸãã
ã¯ã©ã¹ã®ãã¬ãŒã³ããŒã·ã§ã³
å€ãã®å Žåãã¯ã©ã¹ãæååãšããŠè¡šçŸãããšäŸ¿å©ã§ãã Pythonã«ã¯ãã¯ã©ã¹ãè¡šããšãã«ã€ã³ã©ã€ã³é¢æ°ã®åäœãã«ã¹ã¿ãã€ãºããããã«å®çŸ©ã§ããã¡ãœãããããã€ããããŸãã
__str__(self)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠåŒã³åºãããstr()
é¢æ°ã®åäœãå®çŸ©ããŸãã
__repr__(self)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠrepr()
é¢æ°ã®åäœãå®çŸ©ããŸãã ã¿ãŒã²ãããªãŒãã£ãšã³ã¹ã®str()
ãšã®äž»ãªéãã repr()
ãã·ã³æåã®åºåçšã§ããïŒããã«ãå€ãã®å Žåãæå¹ãªPythonã³ãŒãã§ããå¿
èŠãããstr()
ïŒã str()
ã¯äººã
ãèªãããã®ãã®ã§ãã
__unicode__(self)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠåŒã³åºãããunicode()
é¢æ°ã®åäœãå®çŸ©ããŸãã unicode()
ã¯str()
ã«äŒŒãŠããŸãããæååãunicodeã§è¿ããŸãã 泚æïŒã¯ã©ã€ã¢ã³ããã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§str()
ãåŒã³åºãã __unicode__()
ã®ã¿ãå®çŸ©ããå Žåãããã¯æ©èœããŸããã 誰ããUnicodeã®è±ªè¯ããæã£ãŠããªãå Žåã®ããã«ãåžžã«__str__()
ãå®çŸ©ããããã«ããŠãã ããã
__format__(self, formatstr)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãæ°ããã¹ã¿ã€ã«ã®æååã®ãã©ãŒãããã«äœ¿çšããããšãã®åäœãå®çŸ©ããŸãã ããšãã°ã "Hello, {0:abc}!".format(a)
ã«ããa.__format__("abc")
åŒã³åºãããŸãã ããã¯ãç¹å¥ãªæžåŒèšå®ãªãã·ã§ã³ãæäŸãããç¬èªã®æ°å€ãŸãã¯æååã¿ã€ããå®çŸ©ããã®ã«åœ¹ç«ã¡ãŸãã
__hash__(self)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠåŒã³åºãããhash()
é¢æ°ã®åäœãå®çŸ©ããŸãã ãã®ã¡ãœããã¯ãèŸæžã®ããŒããã°ããæ¯èŒããããã«äœ¿çšãããæŽæ°å€ãè¿ãå¿
èŠããããŸãã ãã®å Žåãéåžžã¯__eq__
ãå®çŸ©ããå¿
èŠãããããšã«æ³šæããŠãã ããã 次ã®ã«ãŒã«ã䜿çšããŸãa == b
hash(a) == hash(b)
æå³ããŸãã
__nonzero__(self)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã«å¯ŸããŠåŒã³åºãããbool()
é¢æ°ã®åäœãå®çŸ©ããŸãã ã€ã³ã¹ã¿ã³ã¹ãTrueãŸãã¯FalseãšèŠãªãã¿ã€ãã³ã°ã«å¿ããŠãTrueãŸãã¯Falseãè¿ãå¿
èŠããããŸãã
__dir__(self)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§åŒã³åºãããdir()
é¢æ°ã®åäœãå®çŸ©ããŸãã ãã®ã¡ãœããã¯ãå±æ§ã®ãªã¹ãããŠãŒã¶ãŒã«è¿ãå¿
èŠããããŸãã éåžžã __dir__
å®çŸ©ãã__dir__
ãŸãããã __dir__
ãŸãã¯__getattribute__
ïŒæ¬¡ã®ããŒãã§èª¬æããŸãïŒãåå®çŸ©ããå ŽåããŸãã¯å±æ§ãåçã«äœæããå Žåãã¯ã©ã¹ãã€ã³ã¿ã©ã¯ãã£ãã«äœ¿çšããããã«äžå¯æ¬ ã§ãã
__sizeof__(self)
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§sys.getsizeof()
é¢æ°ã®åäœãå®çŸ©ããŸãã ãã®ã¡ãœããã¯ããªããžã§ã¯ãã®ãµã€ãºããã€ãåäœã§è¿ãå¿
èŠããããŸãã äž»ã«Cæ¡åŒµã§å®çŸ©ãããã¯ã©ã¹ã«åœ¹ç«ã¡ãŸãããããã«ã€ããŠç¥ãããšã¯äŸç¶ãšããŠæçšã§ãã
éæ³ã®æ¹æ³ã«é¢ããããã¥ã¢ã«ã®éå±ãªéšåïŒäŸã®ãªãéšåïŒã¯ã»ãŒå®äºããŸããã æãåºæ¬çãªéæ³ã®æ¹æ³ã«ã€ããŠèª¬æããã®ã§ãä»åºŠã¯ããé«åºŠãªçŽ æã«ç§»ããŸãããã
å±æ§ã¢ã¯ã»ã¹å¶åŸ¡
ä»ã®èšèªããPythonã«æ¥ãå€ãã®äººã
ã¯ãã¯ã©ã¹ã®å®éã®ã«ãã»ã«åã®æ¬ åŠã«ã€ããŠäžæºãè¿°ã¹ãŠããŸãïŒäŸãã°ããããªãã¯ã¢ã¯ã»ã¹ã¡ãœããã§ãã©ã€ããŒãå±æ§ãå®çŸ©ããæ¹æ³ã¯ãããŸããïŒã ããã¯å®å
šã«çå®ã§ã¯ãããŸãããã«ãã»ã«åã«é¢é£ããå€ãã®ããšãPythonã¯ãããžãã¯ããéããŠå®è£
ããã¡ãœãããšãã£ãŒã«ãã®æ瀺çãªä¿®é£Ÿåã§ã¯ãããŸããã åç
§ïŒ
__getattr__(self, name)
ãŠãŒã¶ãŒãïŒãŸã£ãããŸãã¯ãããŸã§ã«ïŒååšããªãå±æ§ã«ã¢ã¯ã»ã¹ããããšããå Žåã®åäœãå®çŸ©ã§ããŸãã ããã¯ãé »ç¹ãªã¿ã€ããã¹ã®ã€ã³ã¿ãŒã»ãããšãªãã€ã¬ã¯ããå€ãå±æ§ã®äœ¿çšã«é¢ããèŠåïŒå¿
èŠã«å¿ããŠãã®å±æ§ãèšç®ããŠè¿ãããšãã§ããŸãïŒããŸãã¯å¿
èŠãªãšãã«AttributeError
å·§åŠã«è¿ãã®ã«åœ¹ç«ã¡ãŸãã , , .
__setattr__(self, name, value)
__getattr__
, __setattr__
. , . , . , , __setattr__
, .
__delattr__
, __setattr__
, , . , __setattr__
( del self.name
__delattr__
).
__getattribute__(self, name)
__getattribute__
__setattr__
__delattr__
, . __getattribute__
( , object
). ( , __getattr__(self, name)
). , ( __getattribute__
, ). , , __getattr__
, __getattribute__
AttributeError
ããã¡ããããã®ã¡ãœããã䜿çšã§ããŸãïŒæçµçã«ã¯ãããéžæã§ãïŒããå®éã«åœ¹ç«ã€ïŒå€ãèšå®ããã®ã§ã¯ãªããåä¿¡æã«åäœãåå®çŸ©ããå¿
èŠæ§ãã¯ããã«äœãïŒã±ãŒã¹ãéåžžã«å°ãªãããããå§ãããŸããå¯èœãªãšã©ãŒãªãã§éåžžã«å°é£ã§ãã
å±æ§ãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããã¡ãœãããå®çŸ©ãããšãåé¡ãçºçãããããªããŸãã äŸãèããŠã¿ãŸãããïŒ
def __setattr__(self, name, value): self.name = value
ç¹°ãè¿ãã«ãªããŸãããPythonã®éæ³ã®ææ³ã®åã¯ä¿¡ããããªãã»ã©çŽ æŽããããã®ã§ããã倧ããªåã«ã¯å€§ããªè²¬ä»»ã䌎ããŸããäœãå£ããã«ããžãã¯ã¡ãœãããæ£ãã䜿çšããæ¹æ³ãç¥ãããšãéèŠã§ããããã§ã¯ãå±æ§ã¢ã¯ã»ã¹å¶åŸ¡ã«ã€ããŠäœãåŠã³ãŸãããïŒè»œã䜿çšããå¿
èŠã¯ãããŸãããå®éããããã¯é床ã«åŒ·åã§éè«ççã§ããåŸåããããŸããããããååšããçç±ã¯ãç¹å®ã®æ¬²æ±ãæºããããã§ããPythonã¯æªãããšãå®å
šã«çŠæ¢ããåŸåã¯ãªãããã®äœ¿çšãè€éã«ããã ãã§ããèªç±ã¯æåªå
äºé
ã§ãã®ã§ãããªãã¯å®éã«äœã§ãããããããšãã§ããŸããã¢ã¯ã»ã¹å¶åŸ¡ã¡ãœããã®äœ¿çšäŸã次ã«ç€ºããŸãïŒsuper
ãã¹ãŠã®ã¯ã©ã¹ã«å±æ§ãããããã§ã¯ãªããããã䜿çšããŠããããšã«æ³šæããŠãã ãã__dict__
ïŒã class AccessCounter(object): ''', value . , value.''' def __init__(self, val): super(AccessCounter, self).__setattr__('counter', 0) super(AccessCounter, self).__setattr__('value', val) def __setattr__(self, name, value): if name == 'value': super(AccessCounter, self).__setattr__('counter', self.counter + 1)
ã«ã¹ã¿ã ã·ãŒã±ã³ã¹ãäœæãã
Pythonã«ã¯ãã¯ã©ã¹ãã€ã³ã©ã€ã³ã·ãŒã±ã³ã¹ïŒèŸæžãã¿ãã«ããªã¹ããæååãªã©ïŒã®ããã«åäœãããå€ãã®æ¹æ³ããããŸãããã¡ããããããã¯é«åºŠãªå¶åŸ¡ã®äžåçããšãã°ããŒãã«é¢æ°ã®ãã¹ãå
šäœãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãšå®å
šã«æ©èœãå§ããéæ³ã®ããã«ãç§ã®ãæ°ã«å
¥ãã®éæ³ã®æ¹æ³ã§ããããããããããçš®é¡ã®è¯ãããšãå§ããåã«ããããã³ã«ã«ã€ããŠç¥ãå¿
èŠããããŸãããããã³ã«
Pythonã§ç¬èªã®ã·ãŒã±ã³ã¹ãäœæããããšãã§ããã®ã§ã次ã¯ãããã³ã«ã«ã€ããŠèª¬æããŸãããããã³ã«ã¯ãå®è£
ããå¿
èŠãããäžé£ã®ã¡ãœãããæäŸãããšããç¹ã§ãä»ã®èšèªã®ã€ã³ã¿ãŒãã§ã€ã¹ã«å°ã䌌ãŠããŸãããã ããPythonã§ã¯ããããã³ã«ã¯çµ¶å¯Ÿã«äœã®çŸ©åãè² ãããå¿
ãããã¢ããŠã³ã¹ã¡ã³ãã®å®è£
ãå¿
èŠãšããŸããããããã¯ããããã¬ã€ãã©ã€ã³ã®ããã«èŠããŸãããããã³ã«ã«ã€ããŠè©±ããŠããã®ã¯ãªãã§ããïŒ Pythonã§ã®ä»»æã®ã³ã³ããã¿ã€ãã®å®è£
ã«ã¯ããããã®ããã€ãã®äœ¿çšã䌎ãããã§ããæåã«ãäžå€ã³ã³ãããå®çŸ©ããããã®ãããã³ã«ïŒäžå€ã³ã³ãããäœæããã«ã¯ãå®çŸ©__len__
ãš__getitem__
ïŒããã«ãããã«ã€ããŠã®è©³çŽ°ïŒãå¯å€ã³ã³ãããããã³ã«ã«ã¯ãäžå€ã³ã³ãããšåããã®ã«å ããŠ__setitem__
ããšãå¿
èŠ__delitem__
ã§ããæåŸã«ããªããžã§ã¯ããå埩å¯èœã«ããå Žåã¯ã__iter__
ã©ã®å埩åãè¿ããããã決å®ããå¿
èŠããããŸãããã®å埩åã¯ãã¡ãœãã__iter__
ïŒããèªäœãè¿ãïŒããã³ãå¿
èŠãšããå埩åãããã³ã«ã«æºæ ããå¿
èŠãããnext
ãŸããã³ã³ããããžãã¯
ããã«é
延ããããšãªããã³ã³ããã§äœ¿çšãããéæ³ã®ã¡ãœããã¯æ¬¡ã®ãšããã§ãã__len__(self)
ã³ã³ããå
ã®ã¢ã€ãã ã®æ°ãè¿ããŸããå¯å€ããã³äžå€ã³ã³ããã®ãããã³ã«ã®äžéšã
__getitem__(self, key)
, self[key]
. . : TypeError
KeyError
.
__setitem__(self, key, value)
, self[nkey] = value
. . , KeyError
TypeError
.
__delitem__(self, key)
( del self[key]
). . , .
__iter__(self)
. , iter()
for x in container:
. __iter__
, self
.
__reversed__(self)
reversed()
. . , .
__contains__(self, item)
__contains__
in
ããã³ã䜿çšããŠèŠçŽ ã®æææš©ã確èªããããã«èšèšãããŠãnot in
ãŸãããªããããã·ãŒã±ã³ã¹ãããã³ã«ã®äžéšã§ã¯ãªãã®ããšå°ãããããããŸããã__contains__
å®çŸ©ãããŠããªãå ŽåãPythonã¯åçŽã«èŠçŽ ããšã«ã·ãŒã±ã³ã¹å
šäœãå埩åŠçãTrue
ãæ£ãããã®ãèŠã€ãã£ãå Žåã«æ»ãããã§ãã
__missing__(self, key)
__missing__
ããç¶æ¿ãããšãã«äœ¿çšããdict
ãŸããååšããªãããŒã§èŠçŽ ãååŸããããšããå Žåã®åã±ãŒã¹ã®åäœã決å®ããŸãïŒããšãã°ãèŸæžãd
ãããèŸæžã®ããŒã§ã¯ãªãd["george"]
ãšãã«æžã蟌ã"george"
ãšåŒã°ããŸãd.__missing__("george")
ïŒã
äŸ
äŸãšããŠãä»ã®èšèªïŒHaskellãªã©ïŒã§ééããå¯èœæ§ã®ããããã€ãã®æ©èœçæ§æèŠçŽ ãå®è£
ãããªã¹ããèŠãŠã¿ãŸãããã class FunctionalList: '''- : head, tail, init, last, drop, take.''' def __init__(self, values=None): if values is None: self.values = [] else: self.values = values def __len__(self): return len(self.values) def __getitem__(self, key):
() . , , , ( , ?),
Counter
,
OrderedDict
,
NamedTuple
.
,
isinstance()
issubclass()
, . ããã«ãããŸãïŒ
__instancecheck__(self, instance)
, ( isinstance(instance, class)
, .
__subclasscheck__(self, subclass)
, ( issubclass(subclass, class)
).
ãããã®éæ³ã®æ¹æ³ãæçã«äœ¿çšããããã®ãªãã·ã§ã³ã¯ã»ãšãã©ãªãããã«æãããããããŸããããå®éã¯ããã§ããããç§ã¯ãªãã¬ã¯ã·ã§ã³ã®éæ³ã®ææ³ã«ããŸãæéããããããããŸããããããã¯ããŸãéèŠã§ã¯ãããŸããããPythonã®ãªããžã§ã¯ãæåããã°ã©ãã³ã°ãšPythonå
šè¬ã«ã€ããŠéèŠãªããšãåæ ããŠããŸãããã®ãäœã§ããã§ã¯éåžžã«ãŸãã«ããèµ·ãããŸããããããã®éæ³ã®ã¡ãœããã¯åœ¹ã«ç«ããªãããã«èŠãããããããŸããããããããå¿
èŠã«ãªã£ãå ŽåãããããååšããããšãèŠããŠåãã§ããã§ãããïŒãããŠããã®ããã¥ã¢ã«ãèªãã§ããŸãïŒïŒãåŒã³åºããããªããžã§ã¯ã
ããããæ¢ã«ãåç¥ã®ããã«ãPythonã§ã¯ãé¢æ°ã¯ãã¡ãŒã¹ãã¯ã©ã¹ã®ãªããžã§ã¯ãã§ããããã¯ãä»ã®ãªããžã§ã¯ããšåæ§ã«ãããããé¢æ°ãŸãã¯ã¡ãœããã«æž¡ãããšãã§ããããšãæå³ããŸããããã¯éåžžã«åŒ·åãªæ©èœã§ããç¹æ®ãªããžãã¯ã¡ãœããã䜿çšãããšãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãé¢æ°ã®ããã«åäœãããããšãã§ããŸããã€ãŸãããããããåŒã³åºãããé¢æ°ãåŒæ°ãšããŠåãåãé¢æ°ã«æž¡ãããšãã§ããŸããããã¯ãPythonããã°ã©ãã³ã°ããšãŠã楜ãããããã1ã€ã®äŸ¿å©ãªæ©èœã§ãã__call__(self, [args...])
ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãé¢æ°ã®ããã«åŒã³åºãããšãã§ããŸããããã¯äž»ã«x()
ããšåãããšãæå³ãx.__call__()
ãŸãã__call__
ä»»æã®æ°ã®åŒæ°ãåãããšã«æ³šæããŠãã ãããã€ãŸããå¿
èŠ__call__
ãªæ°ã®åŒæ°ãåãä»ã®é¢æ°ãšåãããã«å®çŸ©ã§ããŸãã
__call__
ç¹ã«ãã€ã³ã¹ã¿ã³ã¹ãç¶æ
ãé »ç¹ã«å€æŽããã¯ã©ã¹ã§åœ¹ç«ã¡ãŸãããåŒã³åºããã€ã³ã¹ã¿ã³ã¹ã¯ããªããžã§ã¯ãã®ç¶æ
ãå€æŽããããã®çŽæçã§ãšã¬ã¬ã³ããªæ¹æ³ã§ããäŸã¯ãå¹³é¢äžã®ãªããžã§ã¯ãã®äœçœ®ãè¡šãã¯ã©ã¹ã§ãã class Entity: ''', . "", .''' def __init__(self, size, x, y): self.x, self.y = x, y self.size = size def __call__(self, x, y): ''' .''' self.x, self.y = x, y
ã³ã³ããã¹ããããŒãžã£ãŒ
Python 2.5ã§ã¯ãæ°ããããŒã¯ãŒããšãã³ãŒããåå©çšããæ°ããæ¹æ³ã§ããkeywordãå°å
¥ãããŸããwith
ãã³ã³ããã¹ããããŒãžã£ã®æŠå¿µã¯Pythonã«ãšã£ãŠæ°ãããã®ã§ã¯ãããŸããã§ããïŒä»¥åã©ã€ãã©ãªã®äžéšãšããŠå®è£
ãããŠããŸããïŒããPEP 343ã§ã¯èšèªæ§é ã®ã¹ããŒã¿ã¹ãéæããŸãããããªãã¯ãã§ã«åŒãèŠãããšãã§ããŸããwith
ïŒ with open('foo.txt') as bar:
ã³ã³ããã¹ããããŒãžã£ã䜿çšãããšããªããžã§ã¯ãã®äœæãã¹ããŒãã¡ã³ãã«ã©ãããããŠããå Žåã«ãæ§æãŸãã¯ã¯ãªãŒã³ã¢ããããã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãwith
ãã³ã³ããã¹ããããŒãžã£ã®åäœã¯ã2ã€ã®éæ³ã®æ¹æ³ã«ãã£ãŠæ±ºå®ãããŸãã__enter__(self)
ã¹ããŒãã¡ã³ãã«ãã£ãŠäœæããããããã¯ã®å
é ã§ã³ã³ããã¹ããããŒãžã£ãè¡ãã¹ãããšãå®çŸ©ããŸãwith
ãæ»ã__enter__
å€ã¯ãå
éšã§äœæ¥ãè¡ãããå€ã§ããããšã«æ³šæããŠãã ããwith
ã
__exit__(self, exception_type, exception_value, traceback)
, ( ). , , with. , exception_type
, exception_value
, traceback
None
. , ; , , __exit__
True
. , , .
__enter__
ãããŠã__exit__
å
±éãããããã®èšå®ããªãœãŒã¹ã®ç²Ÿè£œã®ããã®è¡åã説æããŠãç¹å®ã®ã¯ã©ã¹ã«ãæçšã§ããåŸãŸãããããã®ã¡ãœããã䜿çšããŠãããŸããŸãªãªããžã§ã¯ãã«å
±éã®ã³ã³ããã¹ããããŒãžã£ãŒãäœæã§ããŸãã以äžã«äŸã瀺ããŸãã
class Closer: ''' close with-.''' def __init__(self, obj): self.obj = obj def __enter__(self): return self.obj
Closer
FTPæ¥ç¶ïŒcloseã¡ãœãããæã€ãœã±ããïŒã§ã®äœ¿çšäŸïŒ >>> from magicmethods import Closer >>> from ftplib import FTP >>> with Closer(FTP('ftp.somesite.com')) as conn: ... conn.dir() ...
ã©ãããŒãã©ã®ããã«æ£ãããªããžã§ã¯ããšééã£ããªããžã§ã¯ãã®äž¡æ¹ãé©åã«åŠçããããã芧ãã ãããããã¯ãã³ã³ããã¹ããããŒãžã£ãšéæ³ã®ã¡ãœããã®åã§ããæšæºã®Pythonã©ã€ãã©ãªã«ã¯contextlibã¢ãžã¥ãŒã«ãå«ãŸããŠããããšã«æ³šæããŠãã ããããã®ã¢ãžã¥ãŒã«ã«ã¯contextlib.closing()
ãã»ãŒåãããšãè¡ãã³ã³ããã¹ããããŒãžã£ãå«ãŸããŠããŸãïŒãªããžã§ã¯ãã«ã¡ãœããããªãå Žåã®åŠçââã¯ãããŸããclose()
ïŒãæœè±¡åºæ¬ã¯ã©ã¹
http://docs.python.org/2/library/abc.htmlãåç
§ããŠãã ãããèšè¿°åã®æ§ç¯
èšè¿°åã¯ãä»ã®ãªããžã§ã¯ãã®å±æ§ã«ã€ãã³ãã«ã¢ã¯ã»ã¹ããïŒååŸãå€æŽãåé€ããïŒããžãã¯ãè¿œå ã§ããã¯ã©ã¹ã§ããèšè¿°åã¯ãåç¬ã§äœ¿çšããããã®ãã®ã§ã¯ãããŸããããããããããã¯ãããã«é¢é£ä»ããããããã€ãã®ã¯ã©ã¹ã«ãã£ãŠææããããšæ³å®ãããŠããŸããèšè¿°åã¯ãå±æ§ãäºãã«äŸåãããªããžã§ã¯ãæåã®ããŒã¿ããŒã¹ãŸãã¯ã¯ã©ã¹ãæ§ç¯ããã®ã«åœ¹ç«ã¡ãŸããç¹ã«ãèšè¿°åã¯ãããã€ãã®èšç®ã·ã¹ãã ã®å±æ§ãŸãã¯èšç®ãããå±æ§ïŒéå§ç¹ããã°ãªããäžã®å±æ§ã«ãã£ãŠè¡šãããç¹ãŸã§ã®è·é¢ïŒãè¡šããšãã«åœ¹ç«ã¡ãŸããã¯ã©ã¹ãèšè¿°åã«ãªãã«ã¯__get__
ã__set__
ãŸãã¯ããå°ãªããšã1ã€ã®ã¡ãœãããå®è£
ããå¿
èŠããããŸã__delete__
ããããã®éæ³ã®ã¡ãœãããèŠãŠã¿ãŸãããïŒ__get__(self, instance, instance_class)
èšè¿°åããå€ãè¿ããšãã®åäœãå®çŸ©ããŸããinstance
ããã¯ãã¡ãœãããåŒã³åºãããŠããèšè¿°åå±æ§ã®ãªããžã§ã¯ãã§ããowner
ããã¯ãªããžã§ã¯ãã®ã¿ã€ãïŒã¯ã©ã¹ïŒã§ãã
__set__(self, instance, value)
èšè¿°åããå€ãå€æŽãããšãã®åäœãå®çŸ©ããŸããinstance
ããã¯ãã¡ãœãããåŒã³åºãããŠããèšè¿°åå±æ§ã®ãªããžã§ã¯ãã§ããvalue
ãã®å€ã¯ãã³ãã«ã«èšå®ãããŸãã
__delete__(self, instance)
èšè¿°åããå€ãåé€ããåäœãå®çŸ©ããŸããinstance
ããã¯ãèšè¿°åãææãããªããžã§ã¯ãã§ãã
èšè¿°åã®äŸ¿å©ãªäœ¿çšäŸïŒåäœå€æã class Meter(object): ''' .''' def __init__(self, value=0.0): self.value = float(value) def __get__(self, instance, owner): return self.value def __set__(self, instance, value): self.value = float(value) class Foot(object): ''' .''' def __get__(self, instance, owner): return instance.meter * 3.2808 def __set__(self, instance, value): instance.meter = float(value) / 3.2808 class Distance(object): ''', , .''' meter = Meter() foot = Foot()
ã³ããŒ
Pythonã§ã¯ã代å
¥æŒç®åã¯ãªããžã§ã¯ããã³ããŒãããå¥ã®ãªã³ã¯ãè¿œå ããã ãã§ãããã ããå¯å€èŠçŽ ãå«ãã³ã¬ã¯ã·ã§ã³ã®å Žåãããã·ãŒã±ã³ã¹ã®èŠçŽ ãå¥ã®ã·ãŒã±ã³ã¹ã«åœ±é¿ãäžããã«å€æŽã§ããããã«ãå®å
šãªã³ããŒãå¿
èŠã«ãªãå ŽåããããŸããããã«ç»å Žãcopy
ãŸãã幞ããªããšã«ãPythonã®ã¢ãžã¥ãŒã«ã«ã¯å¿ããããŸããããã®ãããçªç¶å¶åŸ¡äžèœã«èªåèªèº«ãã³ããŒãå§ããããã«Linuxãããããææå
šäœãåãå°œããããšãå¿é
ããå¿
èŠã¯ãããŸããã__copy__(self)
copy.copy()
. copy.copy()
â , , . , .
__deepcopy__(self, memodict={})
copy.deepcopy()
. copy.deepcopy()
â . memodict
, , . - , copy.deepcopy()
memodict
.
ãããã®éæ³ã®æ¹æ³ããã€äœ¿çšãããïŒãã€ãã®ããã«-ãããã®å Žåã§ããæšæºçãªåäœä»¥äžã®ãã®ãå¿
èŠãªå Žåãããšãã°ããã£ãã·ã¥ããã£ã¯ã·ã§ããªïŒããããéåžžã«å€§ããªãã£ã¯ã·ã§ããªïŒãšããŠå«ããªããžã§ã¯ããã³ããŒããããšããå Žåããã£ãã·ã¥å
šäœãã³ããŒããå¿
èŠã¯ãªãããªããžã§ã¯ãã®å
±æã¡ã¢ãªã«1ã€ã ãã³ããŒããå¿
èŠããããŸãããªããžã§ã¯ãã§pickleã¢ãžã¥ãŒã«ã䜿çšãã
Pickleã¯PythonããŒã¿æ§é ãã·ãªã¢ã«åããããã®ã¢ãžã¥ãŒã«ã§ããããªããžã§ã¯ãã®ç¶æ
ãä¿åããŠåŸã§åŸ©å
ããå¿
èŠãããå ŽåïŒéåžžã¯ãã£ãã·ã¥ç®çïŒã«éåžžã«åœ¹ç«ã¡ãŸããããã«ãçµéšãšæ··ä¹±ã®åªããæºã§ããããŸããã·ãªã¢ã«åã¯éåžžã«éèŠãªã®ã§ãã¢ãžã¥ãŒã«ïŒpickle
ïŒã«å ããŠãç¬èªã®ãããã³ã«ãšç¬èªã®ããžãã¯ã¡ãœãããæã£ãŠããŸããããããæåã«ãpickleã䜿çšããŠæ¢åã®ããŒã¿åãã·ãªã¢ã«åããæ¹æ³ïŒæ¢ã«ç¥ã£ãŠããå Žåã¯ã¹ãããããŠãã ããïŒãã·ãªã¢ã©ã€ãºã«ã€ããŠç°¡åã«
ã·ãªã¢ã«åã«é£ã³èŸŒã¿ãŸããããåŸã§ä¿åããŠåŸ©å
ãããèŸæžããããšããŸãããã®å
容ããã¡ã€ã«ã«æžã蟌ã¿ãæ£ããæ§æã§èšè¿°ããŠããããšã確èªããŠããããã¡ã€ã«ãå®è¡exec()
ãŸãã¯èªã¿åãããšã«ããã埩å
ããå¿
èŠããããŸããããããããã¯ããããå±éºã§ãïŒéèŠãªããŒã¿ãããã¹ãã§ä¿åãããšãããã°ã©ã ãã¯ã©ãã·ã¥ãããããäžè¬çã«ã¯ã³ã³ãã¥ãŒã¿ãŒã§å±éºãªã³ãŒããå®è¡ãããããããã«ãããŸããŸãªæ¹æ³ã§ããŒã¿ãç ŽæãŸãã¯ä¿®æ£ã§ããŸããpickleã䜿çšããæ¹ãè¯ãïŒ import pickle data = {'foo': [1, 2, 3], 'bar': ('Hello', 'world!'), 'baz': True} jar = open('data.pkl', 'wb') pickle.dump(data, jar)
ãããŠä»ãæ°æéåŸãåã³èŸæžãå¿
èŠã«ãªããŸãã import pickle pkl_file = open('data.pkl', 'rb')
ã©ããã
ãŸãã«æåŸ
ããããã®ãdata
ãã€ãããã«ãããã®ããã«ãããŠã泚æã«ã€ããŠå°ãïŒãã¯ã«ã¹ã¯å®ç§ã§ã¯ãããŸããããã®ãã¡ã€ã«ã¯ãå¶ç¶ãŸãã¯æå³çã«ç°¡åã«ç ŽæããŸããPickleã¯ããã¹ããã¡ã€ã«ãããå®å
šãããããŸããããæªæã®ããã³ãŒããå®è¡ããããã«äœ¿çšã§ããŸããããã«ãPythonã®ç°ãªãããŒãžã§ã³éã§ã¯äºææ§ããªããããpickleã䜿çšããŠãªããžã§ã¯ããé
åžããå Žåããã¹ãŠã®äººããããã䜿çšã§ãããšã¯èããªãã§ãã ããããã ããã¢ãžã¥ãŒã«ã¯ããã£ãã·ã¥ããã®ä»ã®äžè¬çãªã·ãªã¢ã«åã¿ã¹ã¯ã®ããã®åŒ·åãªããŒã«ã«ãªãå¯èœæ§ããããŸããç¬èªã®ãªããžã§ã¯ãã®ã·ãªã¢ã«åã
pickleã¢ãžã¥ãŒã«ã¯ãã«ãã€ã³åå°çšã§ã¯ãããŸããããããã³ã«ãå®è£
ãããã¹ãŠã®ã¯ã©ã¹ã§äœ¿çšã§ããŸãããã®ãããã³ã«ã«ã¯ãpickleãããããåŠçããæ¹æ³ãèšå®ã§ãããªãã·ã§ã³ã®ã¡ãœããã4ã€å«ãŸããŠããŸãïŒCæ¡åŒµæ©èœã«ã¯ããã€ãã®éãããããŸãããããã¯ã¬ã€ãã®ç¯å²å€ã§ãïŒã__getinitargs__(self)
çŽåå解é€åŸã«ã¯ã©ã¹ãåŒã³åºãããå Žåã¯__init__
ã__getinitargs__
ã©ããåŒæ°ã®ã¿ãã«ãè¿ããã決å®ã§ããŸã__init__
ããã®ã¡ãœããã¯å€ãã¹ã¿ã€ã«ã®ã¯ã©ã¹ã§ã®ã¿æ©èœããããšã«æ³šæããŠãã ããã
__getnewargs__(self)
æ°ããã¹ã¿ã€ã«ã®ã¯ã©ã¹ã®å Žåã__new__
éã·ãªã¢ã«åäžã«æž¡ããã©ã¡ãŒã¿ãŒã決å®ã§ããŸãããã®ã¡ãœããã¯ãã«éä¿¡ãããåŒæ°ã®ã¿ãã«ãè¿ãå¿
èŠããã__new__
ãŸãã
__getstate__(self)
__dict__
, , . __setstate__
.
__setstate__(self, state)
__setstate__
, , __dict__
. __getstate__
: , , .
__reduce__(self)
( Python's C API), , , . __reduce__()
, . , , , . 2 5 : , , , , , __setstate__
(), () ().
__reduce_ex__(self, protocol)
å®è£
ãããšããããã³ã«ããŒãžã§ã³ãç¥ãã®ã¯æã
圹ã«ç«ã¡ãŸã__reduce__
ããããŠãããã¯ä»£ããã«å®è£
ããããšã§éæã§ããŸã__reduce_ex__
ã__reduce_ex__
å®è£
ãããŠããå ŽåãåŒã³åºãèšå®ãäžããããŸãïŒ__reduce__
äžäœäºææ§ã®ããã«å®è£
ããå¿
èŠããããŸãïŒã
äŸ
ããšãã°ãã¹ã¬ãŒãããŒãïŒSlate
ïŒã«ã€ããŠèª¬æããŸãããã®ããŒãã«ã¯ãäœããã€æžãããããèšæ¶ãããŠããŸãããã ããå
·äœçã«ã¯ããã®ããŒãã¯ã·ãªã¢ã«åããããã³ã«ã¯ãªãŒã³ã«ãªããŸããçŸåšã®å€ã¯ä¿åãããŸããã import time class Slate: ''', . .''' def __init__(self, value): self.value = value self.last_change = time.asctime() self.history = {} def change(self, new_value):
ãããã«
ãã®ã¬ã€ãã®ç®çã¯ãPythonããªããžã§ã¯ãæåããã°ã©ãã³ã°ã®çµéšã«é¢ä¿ãªããèªãã ãã¹ãŠã®äººã«äœããäŒããããšã§ããPythonãåããŠäœ¿çšããå Žåã¯ãæ©èœçã§ãšã¬ã¬ã³ãã§äœ¿ããããã¯ã©ã¹ãäœæããããã®åºæ¬ã«ã€ããŠã®è²Žéãªç¥èã身ã«ã€ããŠããŸããããªããäžçŽã¬ãã«ã®ããã°ã©ããŒã§ãããªããããªããšããªãã®ã¯ã©ã€ã¢ã³ãã«ãã£ãŠæžãããã³ãŒãã®éãæžããããã€ãã®è¯ãæ°ããã¢ã€ãã¢ãšæŠç¥ãããã€ãã®è¯ãæ¹æ³ãèŠã€ãããããããŸãããããªããå°éã®ãããã¹ãã§ãããªãã°ãããªãã¯ããªãã®ããããå¿ããããç¥èã®ããã€ããæŽæ°ãããããããã¯ããã€ãã®æ°ããããªãã¯ãèŠã€ãããããããŸãããããªãã®ã¬ãã«ã«é¢ä¿ãªããç§ã¯ç¹å¥ãªPythonã¡ãœããã®ãã®æ
ãæ¬åœã«éæ³ã§ãã£ãããšãæã¿ãŸãïŒæµæã§ããŸããã§ããïŒãä»é²1ïŒããžãã¯ã¡ãœããã®åŒã³åºãæ¹æ³
ããžãã¯ã¡ãœããã®äžéšã¯ãçµã¿èŸŒã¿é¢æ°ã«çŽæ¥é¢é£ããŠããŸãããã®å ŽåãããããåŒã³åºãæ¹æ³ã¯éåžžã«æçœã§ãããã ããããã¯åžžã«ããã§ã¯ãããŸããããã®ã¢ããªã³ã¯ãããžãã¯ã¡ãœããã®åŒã³åºãã«ã€ãªããæçœã§ãªãæ§æãæããã«ããããšãç®çãšããŠããŸããããžãã¯ã¡ãœãã | åŒã³åºããããšãïŒäŸïŒ | 説æ |
---|
__new__(cls [,...]) | instance = MyClass(arg1, arg2) | __new__ ã€ã³ã¹ã¿ã³ã¹åæã«åŒã³åºããã |
__init__(self [,...]) | instance = MyClass(arg1, arg2) | __init__ ã€ã³ã¹ã¿ã³ã¹åæã«åŒã³åºããã |
__cmp__(self, other) | self == other ãself > other ãç | æ¯èŒã®ããã«åŒã³åºãããŸãã |
__pos__(self) | +self | åé
ãã©ã¹èšå· |
__neg__(self) | -self | åé
ãã€ãã¹èšå· |
__invert__(self) | ~self | ãããåäœã®å転 |
__index__(self) | x[self] | ãªããžã§ã¯ããã€ã³ããã¯ã¹ãšããŠäœ¿çšããããšãã«å€æãã |
__nonzero__(self) | bool(self) ã if self: | ãªããžã§ã¯ãã®ããŒã«å€ |
__getattr__(self, name) | self.name # name | ååšããªãå±æ§ãååŸããããšããŠããŸã |
__setattr__(self, name, val) | self.name = val | ä»»æã®å±æ§ãžã®å²ãåœãŠ |
__delattr__(self, name) | del self.name | å±æ§ãåé€ |
__getattribute__(self, name) | self.name | å±æ§ãååŸãã |
__getitem__(self, key) | self[key] | ã€ã³ããã¯ã¹ãä»ããŠã¢ã€ãã ãååŸãã |
__setitem__(self, key, val) | self[key] = val | ã€ã³ããã¯ã¹ãä»ããŠã¢ã€ãã ã«å²ãåœãŠã |
__delitem__(self, key) | del self[key] | ã€ã³ããã¯ã¹ããã¢ã€ãã ãåé€ãã |
__iter__(self) | for x in self | å埩 |
__contains__(self, value) | value in self ã value not in self | ã§æææš©ã確èªãã in |
__call__(self [,...]) | self(args) | ãåŒã³åºããã€ã³ã¹ã¿ã³ã¹ |
__enter__(self) | with self as x: | with ã³ã³ããã¹ããããŒãžã£ãŒæŒç®å |
__exit__(self, exc, val, trace) | with self as x: | with ã³ã³ããã¹ããããŒãžã£ãŒæŒç®å |
__getstate__(self) | pickle.dump(pkl_file, self) | é£èŒ |
__setstate__(self) | data = pickle.load(pkl_file) | é£èŒ |
ãã®è¡šããéæ³ã®ã¡ãœãããåŒã³åºãããã®æ§æãšã¯äœãã«ã€ããŠã®çåã解決ããããšãé¡ã£ãŠããŸããè£è¶³2ïŒPython 3ã®å€æŽ
Python 3ããªããžã§ã¯ãã¢ãã«ã®ç¹ã§2.xãšç°ãªãããã€ãã®äž»ãªã±ãŒã¹ã«ã€ããŠèª¬æããŸãã- æååãšUnicodeãšã®éã®Python 3ã®å·®ããªããªã£ãŠããã®ã§ã
__unicode__
æ¶å€±ãåã³ç»å Ž__bytes__
ïŒã©ã®ãããªæå__str__
åã³__unicode__
2.7ïŒãæ§ç¯ããããã®æ°ããçµã¿èŸŒã¿é
åãã€ãæ©èœããŸãã - Python 3ã®é€ç®ãããã©ã«ãã®ãæ£ããé€ç®ãã§ãã
__div__
ããããã以äžã¯ãããŸããã __coerce__
åé·æ§ãšå¥åŠãªåäœã®ããã«ããã以äžã¯ãããŸããã__cmp__
åé·æ§ã®ãããã以äžã__nonzero__
ã«æ¹åãããŸãã__bool__
ãnext
at iteratorsã«ååãå€æŽãããŸãã__next__
ã