Pythonã§ã¯ã©ã¹Cå ã®åãã³ãã«Cèªèº«ãæå®ããã¨NameErrorãçºçããåé¡ã®å¯¾å¦æ³
åé¡
以ä¸ã®ããã«ããã¯ã©ã¹Cã®ã¡ã½ããfã®åãã³ãã«Cèªèº«ã使ãããã¨ãã¾ãã
class C: def f(self) -> C: # causes NameError! return C()
ãã®ã³ã¼ãããã®ã¾ã¾å®è¡ããã¨ä»¥ä¸ã®ããã«NameErrorãçºçãã¾ãã
$ python foo.py Traceback (most recent call last): File "/Users/mickey/foo.py", line 1, in <module> class C: File "/Users/mickey/foo.py", line 2, in C def f(self) -> C: NameError: name 'C' is not defined
åå
ã¡ã½ããfãå®ç¾©ãããæç¹ã§ã¯ã©ã¹Cèªä½ã®å®ç¾©ãå®äºãã¦ããªãããããã®æç¹ã§ååCã解決ã§ããªããã¨ãNameErrorã®åå ã§ãã
解決ç
以ä¸ã®ããã«åãã³ãã®Cãã¯ã©ã¼ãã§æ¬ãã¨è§£æ±ºãã¾ãã
class C: def f(self) -> 'C': # quoted, causes no error return C()
ããã¯Forward Referencesã¨å¼ã°ãããã®ã§ãååãæååãªãã©ã«ã§æå®ãããã¨ã§ååã®è§£æ±ºãå¾åãã«ãããã¨ãã§ãã¾ãã