たとえば、次のような Vector クラスがあるとします。
class Vector(object):
def __init__(self, x=0.0, y=0.0):
self.x = x
self.y = y
def __str__(self):
return '(%s, %s)' % (self.x, self.y)
このオブジェクトを引数として関数に渡すと、関数はそれを次のように認識します。
<__main__.Vector object at 0x02297E50>
これで、関数に Vector について事前に知らせることができるので (いわば)、その属性にアクセスすることを知ることができます。
def foo(vect1, vect2):
return (vect2.x - vect1.x, vect2.y - vect1.y)
しかし、座標のペアだけを受け入れる一般的な関数が必要な場合はどうすればよいでしょうか?
def foo(p1, p2):
return (p2[0] - p1[0], p2[1] -p1[1])
オブジェクトを特定の方法で表現する方法はありますか? たとえば、Vector オブジェクトを上記の一般的な関数に渡すことができるように、関数がオブジェクトの種類を知る必要はありませんか? つまり、オブジェクトの属性を構成する座標だけが「見える」のですか?
うまくいけば、それは理にかなっています!