2017-02-26 66 views
-1

我目前正在通過優秀的Python koans,我可以通過一些谷歌搜索來理解他們中的大多數,但這一個讓我難住(注意:__變量是我必須找到的答案的佔位符):如何在表達式中使用__class__?

class AboutTuples(Koan): 

    # .... 

    def test_tuples_of_one_look_peculiar(self): 
     self.assertEqual(__, (1).__class__) 
     self.assertEqual(__, (1,).__class__) 
     self.assertEqual(__, ("Hello comma!",)) 

我明白__class__返回表達式的類型,所以在第一種情況下,這應該是「包含整數的元組」,以及另外兩個......我不太清楚,因爲第一個元素後的逗號。因爲它是,它失敗,我得到這個輸出:

You have not yet reached enlightenment ... 
    AssertionError: '-=> FILL ME IN! <=-' != <class 'int'> 

這是通常的答案,如果你已經離開佔位符變量。在此之後,我試過如下:

self.assertEqual("<class 'int'>", (1).__class__) 

但我得到以下輸出:

You have not yet reached enlightenment ... 
    AssertionError: "<class 'int'>" != <class 'int'> 

所以很明顯它不是期望得到一個字符串,可能是一個類型的某種......我該怎麼表達這在Python中?其他兩個測試用例的答案是否相似?

編輯:Link to the exact koan,以防萬一

+3

'self.assertEqual(int,(1).__ class __)'? *「在第一種情況下,這應該是」一個包含整數的元組「* - 否,絕對不應該;這就是練習試圖教給你的開始。 – jonrsharpe

回答

2

(1)不是一個元組;括號僅用於消除1.__class__的屬性訪問,解析器將解釋爲從1.開始的格式錯誤的浮點數字。但是,元組。元組由逗號定義,而不是括號,這就是爲什麼您可以使用類似x = 1, 2這樣的元素來定義元組的原因。 (空元組例外是()而不是(,)。)

同樣,("Hello, world!",)是包含一個字符串的元組。


至於什麼應該更換____class__解析與對象,而不是字符串相關的類對象。在示例中,您將分別使用inttuple作爲__class__這兩種用法返回的類對象。

+0

啊,太簡單了!第一個陳述很棘手。感謝您的幫助。 – SolarBear

相關問題