2017-02-26 16 views
-1

私は現在、優秀なPython koansを行っています。ほとんどのグーグルで彼らのほとんどを理解することができますが、私は困惑しています(__変数は、私が見つけなければならない答えのプレースホルダーです):式で__class__を使用するにはどうすればよいですか?

私はのため、 __class__は、式の型を返すので、最初のケースでは、これは「整数を含むタプル」であるべきであり、他の二つのために...私はかなりよく分からないことを理解し
class AboutTuples(Koan): 

    # .... 

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

最初の要素の後のコンマ。それは失敗し、この出力が得られます。

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

これは、プレースホルダ変数を残した場合の通常の回答です。私はどのように表現するか...

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

だから、はっきりそれはおそらく、いくつかの種類のタイプを文字列を期待していない:

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

しかし、私は次のような出力が得られます。これに続いて、私は次のことを試してみましたこれはPythonでですか?答えは他の2つのテストケースで同様ですか?

EDIT:Link to the exact koan、念の

+3

'self.assertEqual(int、(1).__ class __)'? * "最初の場合、これは"整数を含むタプル "でなければなりません" * - それは絶対にすべきではありません。それが練習があなたに教えようとしていることです。 – jonrsharpe

答えて

2

(1)タプルありません。括弧は、属性アクセスを1.__class__から曖昧さを排除するためにのみ存在し、パーサは、1.で始まる不正な浮動小数点リテラルとして解釈します。

(1,)は、ですが、タプルです。タプルは、括弧ではなくコンマで定義されています。そのため、x = 1, 2のようなタプルを定義することができます。 (例外は空のタプルで、(,)ではなく(,)ではなく)です。

同様に、("Hello, world!",)は1つの文字列を含むタプルです。 __を交換すべきかについては


__class__はオブジェクトではなく、文字列に関連付けられたクラスオブジェクトに解決されます。あなたの例では、__class__という2つの用途によって返されるクラスオブジェクトとして、それぞれinttupleを使用します。

+0

ああ、とても簡単!最初のステートメントは難しいものでした。ご協力ありがとうございました。 – SolarBear

関連する問題