この猫はネズミを捕えるか

U「それじゃ、お約束の 3+4 から始めましょうか」

def ex1(): Polish("3+4")

>>> ex1()

Traceback (most recent call last):
  ...
  File "/Users/sketch/hydrangea.py", line .., in ex1
    def ex1(): Polish("3+4")
NameError: global name 'Polish' is not defined

− Uさん、キーボードからコードを入力すると、すぐに F5 キーを
U「これでエラーが確認できるでしょ」
R「まだクラスを定義してませんよね」
U「だから、ここでエラーになることが大切なの。まず『猫を飼うならネズミを捕えるか』確かめてからでないと…」
R「…」
U「ここでエラーにならなかったら、それこそ大変。少なくともこれで、Polish というクラスが他で定義されてないのは確かでしょ」
R「あ、そうですね」
U「エラーメッセージはコメントにして残しておくといいよ」

"""
>>> ex1()

Traceback (most recent call last):
  ...
  File "/Users/sketch/hydrangea.py", line ..., in ex1
    def ex1(): Polish("3+4")
NameError: global name 'Polish' is not defined
"""

− Uさん、エラーメッセージを copy&paste して、コメントとしてコードの中に埋め込みます
U「次に、空のクラスを定義して…」

class Polish: pass

>>> ex1()

Traceback (most recent call last):
  ...
  File "/Users/sketch/hydrangea.py", line ..., in ex1
    def ex1(): Polish("3+4")
TypeError: this constructor takes no arguments

U「ほら、今度はさっきと違うメソセージが出るでしょ」
R「ですね」
U「この違いが何だか分かる?」
R「…」
U「そこにあるはずの引数がないって、言ってるでしょ」
R「constructor っていうのは…」
U「じゃ、今日はそこから始めようね」


《Note》重複するクラス:クラスに限らず重複する名前(モジュール、関数などの大域名)を扱うときには、細心の注意が必要です。当然のことながら、すでに同じ名前のクラスを他の目的で利用していると、不具合を生じる可能性があります。些細なことですが、事前のチェックを怠らない癖をつけておく(習慣にする)と、大きな障害を未然に防ぐことにもつながります。《ひよ子》□