【3minで読める】DS初学者向け ドキュメントを読んだときにクラスが何かわかるようにしよう！基礎の基礎編！

# 本記事読了後の目標！
本記事はDS初学者向けですので、ツヨツヨエンジニアの方々には向いてないと思います。
まず本記事読了後の目標は、自分で公式ドキュメントなどを眺めたときに、クラスにビビらないようにすることです！
それも筆者も独学からDSをスタートしたとき、関数とかはよくわかるけど、結局クラスってなんなんだと思っており、毎回ドキュメントを読んだときに、なんとなくわかるし使えるけど、クラスがよくわからず、詳細には捉えられてないなという部分が多かったからです。
ぜひ本記事を読んで、少しでもドキュメントなどを読む際の拒否反応が減れば嬉しいです！！

# 想定読者
- 独学で学んでいるエンジニア・データサイエンティスト
- 駆け出しIT系の方々

# クラスとは？
クラスとは、オブジェクト指向プログラミング（OOP）の基本的な概念の一つで、関連するデータ（属性）とメソッド（関数）を一つにまとめたものであり、新しいオブジェクト（インスタンス）を生成するための設計図やテンプレートです。

1. クラスの基本的な特徴
    - カプセル化
        - クラスは、データとそのデータを操作するメソッドを一つにまとめることで、データの隠蔽（カプセル化）を実現します。これにより、クラス外部からの不正なアクセスを防ぎ、データの安全性を確保します
    - 継承
        - クラスは他のクラスから属性やメソッドを引き継ぐことができます。これにより、コードの再利用性を高め、新しいクラスを作成する際に既存のクラスの機能を拡張できます
    - ポリモーフィズム（多態性）
        - 異なるクラスのオブジェクトが、同じインターフェースを共有することで、同じ操作を行うことができる性質です。これにより、異なるクラスのオブジェクトを統一的に扱うことができます


・・・・と言葉で説明することはよくありますが、文章のみでは、よくわかりませんよね？
まずは、そんなためのものなんだなと思ってください笑。

次の章から実際のコードと共に確認しましょう！

# クラスは怖くない！
以下にクラスのコードを記載します。
```python:python
    class Dog:
        # クラス変数
        species = "Canis familiaris"
    
        # インスタンスの初期化メソッド
        def __init__(self, name, age):
            self.name = name  # インスタンス変数
            self.age = age    # インスタンス変数
    
        # インスタンスメソッド
        def bark(self):
            return f"{self.name} says woof!"
```

上記がクラスの簡単なコードになります。
この時クラスは"**Dog**"というクラスなんだなということが、まずわかります。
このDogクラスを使ってゴニョゴニョすることの最初に行うのがインスタンス生成です。（あれクラスの話はどこに、、、となりますが、先にインスタンス生成させてください）
クラスもわからんのに、インスタンス......と思う方もいるかと思いますが...

ひとまず、以下インスタンス生成
```python:python
# クラスを元にインスタンスを生成
my_dog = Dog("Rex", 5)

# インスタンスの属性にアクセス
print(my_dog.name)  # 出力: Rex
print(my_dog.age)   # 出力: 5

# インスタンスメソッドの呼び出し
print(my_dog.bark())  # 出力: Rex says woof!

```

どうでしょう？あれ、いつもやってるやつやんとなった方も多いのではないでしょうか？
クラスはいつも皆さんが何かのモデルなどを使う時に用いている、あれなのです！

よく機械学習モデルとかでも多いですよね？
```python:python
#これがインスタンスですよ！！このときはDecisionTreeClassifierクラスを使っていますということです。
clf_model = DecisionTreeClassifier(max_depth=3)
clf_model.fit(X_train, Y_train)
print(clf_model.score(X_test, Y_test))
```
そうなんです、実は普段から皆さんはクラスに触れているのです！なので怖がる必要はありません！！

では次の章からさらにクラスについて学んでいきましょう！

# クラスの中身をコードから理解してみよう
先ほどのDogクラスを使って理解してみましょう。

```python:python
    class Dog:
        # クラス変数
        species = "Canis familiaris"
    
        # インスタンスの初期化メソッド
        def __init__(self, name, age):
            self.name = name  # インスタンス変数
            self.age = age    # インスタンス変数
    
        # インスタンスメソッド
        def bark(self):
            return f"{self.name} says woof!"
```

この時、Dogクラスには機能(メソッド)が１つ備わっています。(brakは吠えるという意味です、なのでreturnでwoofと吠えています)
それが**barkメソッド**です。メソッドというのはクラスの中の機能なんだなーくらいで捉えてもらって大丈夫です。
つまり、Dogクラスでインスタンスを作成した後はbarkという機能が備わっているんだよということです。

実際に以下のコードで確認してみましょう！

```python:python
# クラスを元にインスタンスを生成
my_dog = Dog("Rex", 5)

# インスタンスメソッドの呼び出し
print(my_dog.bark())  # 出力: Rex says woof!

```
まず1行目でDogインスタンスを作成して、my_dogという名前をつけています。
そして、2行目で実際にDogクラスの機能であるbarkを使っています！
そうすると、出力では"**Rex says woof**"と犬が吠えるという機能を使うことができます！

このようにクラスの中には機能=メソッドというものが備わっており、それを我々は普段、利用しているということです。クラスをインスタンスに設定して、それをメソッドとして利用するという流れです。

# まとめ
今後コードを書いているときに、なんでこのコード回らないんだー、わからない、これって中でなにが起きているんだーと言った時に公式ドキュメントに飛んで、ぜひ各クラスの中身、メソッドを見てみてください。そこで、今回の知識があると。こういう中身でこういう出力が得られているのかと、少し理解が進むと思われます！
まだまだクラスには他にも多くの機能がありますが、まずは今回がこの辺にしときましょう！！
要望等があれば、クラスの他の説明記事も追記していきたいと思います！