2017-02-26 29 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

相关问题