質問: 以下のコードがうまく行かない理由を教えてください。 ``` len=('len') #lenを変数として、それにlenというリテラシー(文字)を代入 len(len) エラー結果 Traceback (most recent call last): File "", line 1, in ``` lenという変数には'len'という三文字が入っているので、 3 と表記されるはずなのですが、エラーになります。 おそらく、lenを変数ではなく リテラシー(文字)として読み取っているからだと思いますが、 lenを変数として読ませるにはどうすれば良いですか?
回答: len()は組み込み関数だからです。 簡単に言えば組み込み関数の関数名を変数として使っているため、組み込み関数を上書きしてしまっているのです。 もしどうしてもやるなら、 ``` class Hoge: def __init__(self): self.len = ('len') ins = Hoge() print(len(ins.len)) ``` このようにクラスのインスタンス変数としてだとか、 ``` len2 = len len = ('len') print(len2(len)) ``` こんな風に、上書きする前に関数オブジェクトを別の変数で参照させておくとか。 ただ、あまりおすすめしません。