2015-12-20 29 views
0

假設我試圖在python中創建一個假想的數字類(就像一個練習,我知道那裏已經有一個內置的)。您應該可以將虛數加到其他虛數以及虛數上,反之亦然。Python - 使用多種類型作爲輸入定義函數

我得到了使用__add__()向其他虛構中添加虛構的一個掛鉤,我似乎可以使用鴨子打字將虛構添加到整數(儘管我不太明白),但我不知道如何給虛構添加一個int。請發送幫助。

+0

我不太清楚你在這裏要求什麼幫助;似乎更像是一個數學問題(如何將整數添加到虛數)。也許問問math.se? –

+0

@DanielRoseman我知道如何在數學上做到這一點。我只是想知道如果我有一個虛構的類和一個int類,並且我想要做一個假想的+ int,python中的函數會是什麼樣子。 – PygameNerd

回答

0

對於添加你定義添加方法。

def __add__(self, other): 

,並在你試圖識別其他參數的類型:

if isinstance(other, imaginary): 

您執行基於這些測試的結果計算。

更多的是在這裏解釋:

class ComplexTest(unittest.TestCase): 

    def assertAlmostEqual(self, a, b): 
     if isinstance(a, complex): 
      if isinstance(b, complex): 
       unittest.TestCase.assertAlmostEqual(self, a.real, b.real) 
       unittest.TestCase.assertAlmostEqual(self, a.imag, b.imag) 
      else: 
       unittest.TestCase.assertAlmostEqual(self, a.real, b) 
       unittest.TestCase.assertAlmostEqual(self, a.imag, 0.) 
     else: 
      if isinstance(b, complex): 
       unittest.TestCase.assertAlmostEqual(self, a, b.real) 
       unittest.TestCase.assertAlmostEqual(self, 0., b.imag) 
      else: 
       unittest.TestCase.assertAlmostEqual(self, a, b) 
+0

這是我第一次想到如何做到這一點,但我在任何地方都讀過它,說使用isinstance()函數是不好的風格,所以我認爲可能有另一種方式。我猜不會。 – PygameNerd

1

實施__add__任何東西添加到您的類並實現__radd__實現添加:https://docs.python.org/2/library/numbers.html#implementing-the-arithmetic-operations

您也可以從test_complex.py測試用例的想法你的班級實例到其他地方。在內置類型上使用isinstance並不是一個可怕的想法。在你自己的課堂上使用它通常是一個匆忙或不好的設計的標誌。但是如果你確定類的列表不會太多,不要擔心。如果它會增長,請考慮使用訪問者模式重新設計。

Python data model documentation

對於對象xy,第一x.__op__(y)試圖。如果未實施或返回NotImplemented,則嘗試使用y.__rop__(x)。如果這還沒有執行或者返回NotImplemented,則會引發TypeError異常。

+0

現在這對我來說已經開始有意義了。我一直在深入研究文檔,它一直在幫助,但是你知道這些東西的任何教程嗎?如果沒有,無論如何謝謝你的鏈接。這對我幫助很大。 – PygameNerd

相關問題