2016-03-08 30 views
-1

所以我有一個點類,我聲明一個點,然後對其執行操作。其中一個操作是縮放,如果該點不是浮點值,則會引入一個點並縮放它,同時產生錯誤。這裏是什麼樣子:Python - 點類不返回正確的點

def scale(self, f): 
    if not isinstance(f, float): 
     raise Error("Parameter \"f\" illegal.") 
    self.x0 = f * self.x 
    self.y0 = f * self.y 

如果我用這個測試代碼測試:

print '*** scale' 
# f illegal 
try: 
    p0 = Point(0.0, 0.0) 
    p0.scale(1) 
except Error as e: 
    print 'caught:', e.message 

# normal case 
p0 = Point(2.0, 3.0) 
p0.scale(2.3) 
print p0 

然後輸出我得到的是:

*** scale 
caught: Parameter "f" illegal. 
2 3 

但我想要的輸出是:

*** scale 
caught: Parameter "f" illegal. 
5 7 

所以錯誤信息e看起來不錯,但它打印的值不是。那麼爲什麼不打印出正確的值呢?這裏是我的初始化STR方法:

def __init__(self, x, y): 
     if not isinstance(x, float): 
      raise Error("Parameter \"x\" illegal.") 
     self.x = x 
     if not isinstance(y, float): 
      raise Error ("Parameter \"y\" illegal.") 
     self.y = y 

def __str__(self): 
    return '%d %d' % (int(round(self.x)), int(round(self.y))) 
+0

我想'scale'是'Point'類的一部分。一個顯而易見的錯誤是在'scale'方法中使用'self.x0'和'self.y0'(應該是'x'和'y'),因爲'__str__'方法使用'x'和'y'。 – shahkalpesh

回答

3

您指定給新屬性

self.x0 = f * self.x 
self.y0 = f * self.y 

x0y0xy不同的屬性。因此,xy保持不變。