ここでは、Python データ モデル ( http://docs.python.org/2/reference/datamodel.html#emulating-numeric-types ) を理解することが役立ちます。
を実行すると、これが舞台裏にa + b
変換されます。a.__add__(b)
これは、静的型付けの欠如を考慮して、python が演算子のオーバーロードをサポートする方法です。
C# では、ToString() メソッドを介して文字列に暗黙的にキャストできます。Python には、暗黙的なキャストの概念がありません。ToString() はすべてのオブジェクトで定義されたメソッドであり、C# には静的型付けがあるため、これは機能します。そのため、オブジェクトがいつキャストされるかは呼び出し元にとって明らかです。
この動作を実際に確認したい場合は、次を実行できます (ただし、本番環境では実行しないでください)。
class MyString(str):
def __add__(self, other):
""" automatically concatenate other values as strings """
return super(MyString, self).__add__(str(other))
s = MyString("this is a string")
print s + 1
もちろん、上記の変換を見ると、print 1 + s
. 文字列に変換するだけの場合でも、型変換について明示することをお勧めします。特殊なケースでは気が狂ってしまうからです。