91237
* Input

```

    n = tuple or list
    print(n)
    
```

  * Output

```

    <class 'tuple'>
    
```

これ、入力の時エラーが起きないのです。  
つまり、文法的には間違っていないということですよね？  
何が起きているのか解説お願いします。
CC BY-SA 4.0
2022-09-22T05:24:35.050
91233
2022-09-23T05:06:14.390
2022-09-23T05:06:14.390
19110
54478
question
python
pythonの文法的な質問です。
組み込みで `tuple` という名前のクラスがあるので、変数 `n` に class `tuple` が代入され、その文字列表現が `print`
されています。

<https://docs.python.org/3/library/stdtypes.html#tuple>

Python のクラスはそれ自身もオブジェクトであり値として扱えて、変数に代入することもできます。

<https://docs.python.org/3/tutorial/classes.html>

> As in Smalltalk, classes themselves are objects.
CC BY-SA 4.0
2022-09-22T05:34:41.913
91235
2022-09-22T05:45:04.887
2022-09-22T05:45:04.887
19110
19110
91233
answer
文法上の`or`ブール演算(`A or B`)は、前者(A)が`True`の評価であればAをそのまま返します。  
クラスなどは`None`でない限り`True`評価となりますので、ご質問のコードでは`tuple`が返っています。

**サンプルコード**

```

    if tuple:
        print("ここは通る")
    
    if None:
        print("ここは通らない")
    
    print(tuple or list) # <class 'tuple'>
    print(None or list)  # <class 'list'>
    
```

**参考資料**

  * [Pythonのandとorはif文以外でも使える？andとorの動作が面白いという話をします](https://blog.pyq.jp/entry/python_kaiketsu_181016)
  * [ブール演算 --- and, or, not](https://docs.python.org/ja/3/library/stdtypes.html#boolean-operations-and-or-not)
CC BY-SA 4.0
2022-09-22T05:53:03.933
91237
2022-09-22T05:53:03.933
9820
91233
answer