2016-07-02 16 views
8

Pythonの__add__メソッドでオブジェクトタイプとしてtuplelistを受け入れようとしています。次のコードを参照してください。Python 2.7におけるisinstance関数のタプルとリストの実装

class Point(object): 
'''A point on a grid at location x, y''' 
    def __init__(self, x, y): 
     self.X = x 
     self.Y = y 

    def __str__(self): 
     return "X=" + str(self.X) + "Y=" + str(self.Y) 

    def __add__(self, other): 
     if not isinstance(other, (Point, list, tuple)): 
      raise TypeError("Must be of type Point, list, or tuple") 
     x = self.X + other.X 
     y = self.Y + other.Y 
     return Point(x, y) 

p1 = Point(5, 10) 

print p1 + [3.5, 6] 

Pythonインタプリタでそれを実行しているときに私が得るエラーは次のとおりです。これが機能しない理由

AttributeError: 'list' object has no attribute 'X' 

私は単に私たちを理解することはできません。これは大学の課程の宿題であり、Pythonの経験はほとんどありません。私は、isinstance関数がPythonの型オブジェクトのタプルを受け入れることができるので、tuplelistオブジェクトが受け入れられる要素がわからないことを知っています。私はこれが本当にシンプルなものだと感じています。

答えて

3

を処理する必要があります。

def __add__(self, other): 
    if not isinstance(other, (Point, list, tuple)): 
     raise TypeError("Must be of type Point, list, or tuple") 
    if isinstance(other, (list, tuple)): 
     other = Point(other[0], other[1]) 
    x = self.X + other.X 
    y = self.Y + other.Y 
    return Point(x, y) 

をそうでない場合、あなたは別のPointオブジェクトを追加する必要があると思いますリストではありません。その場合は、最後の行を微調整してください:

print p1 + Point(3.5, 6) 
1

Pythonのリストオブジェクト(またはおそらくどの言語でもxまたはy属性を持たない)というエラーが表示されます。あなたは__add__方法を変更、リストやタプルを追加できるようにしたい場合は、リスト(タプルも)の場合、別途

関連する問題