

Pythonのクラスの書き方について質問があります。

`()` ありとなしでは何が違うのでしょうか？

[code]

    class クラス名():
    
[/code]

[code]

    class クラス名:
    
[/code]


CC BY-SA 4.0
2022-06-19T07:09:07.693
89469
2022-06-19T08:45:26.163
2022-06-19T07:57:15.993
3060
52935
question
python python3 class
Python の class 定義時、() カッコの有無は何が異なる？


どのようなクラスを定義しているかという観点において、両者に差はありません。

Python 3
の[文法定義](https://docs.python.org/3/reference/compound_stmts.html#class-
definitions)を読むと、クラス定義においてこの括弧は省略が可能だと分かります。また、この括弧の中には定義するクラスの継承元となるクラスのリストなどを書くことができますが、継承元を省略した場合自動的に
[`object`
クラス](https://docs.python.org/3/library/functions.html#object)が継承元になるとも書かれています。

したがって、括弧を省略して

[code]

    class C:
      pass
    
[/code]

と書いても、括弧を書いて

[code]

    class C():
      pass
    
[/code]

と書いても、どちらも同じく

[code]

    class C(object):
      pass
    
[/code]

と同じようにクラスが定義されます。

実際、インタプリタで挙動を試してみると以下のようになり、`object` クラスのみを継承するクラスが定義されることが確かめられます。

[code]

    >>> class C1:
    ...   pass
    ...
    >>> class C2:
    ...   pass
    ...
    >>> C1.__mro__
    (<class '__main__.C1'>, <class 'object'>)
    >>> C2.__mro__
    (<class '__main__.C2'>, <class 'object'>)
    
[/code]

### 参考

  * [8.8 Class definitions](https://docs.python.org/3/reference/compound_stmts.html#class-definitions)
  * [`class.__mro__`](https://docs.python.org/3/library/stdtypes.html#class.__mro__)


CC BY-SA 4.0
2022-06-19T08:24:54.990
89471
2022-06-19T08:45:26.163
2022-06-19T08:45:26.163
19110
19110
89469
answer