Python超初心者脱却part1

久々の投稿でかなり文章が分かりにくいと思いますが、頑張って書きますのでみている方の勉強の一助になればいいです。
# 型
### 型とは
数字と文字など人から見ると分かりやすく異なるものが多いですが、Pythonから見た型についてお話しさせて頂きます。数字は数値型で、文字は文字列として分類します。Pythonには他にも複数のデータを格納できるデータ型、様々な要素を引数として値を紐ずけるデータ型もあります。
初めに型の調べ方を話したのちに、色々な種類の型を紹介させて頂きます。
```python:型の調べ方
type(何か)
# <class '何かの型名'>
```
といった形で返してくれます。そこで文字列と数値型の代表例を挙げていきます。
```python:type sample
type("型")
# <class 'str'>
type(1111)
# <class 'int'>
type(1.11)
# <class 'float'>
```
`"型"`は、strという型。`1111`はintという整数の型で、`1.11`はfloatは小数点を含む浮動小数点数型であるとことが分かります。
### メソッド・関数とは
メソッドとはある処理のまとまりに名前をつけたものです。<font color="Red">文字列などのデータが持っているメソッド呼び出す</font>ことで、データに様々な処理を行わせることが出来ます。ちなみによく関数とメソッドの違いについて分からなくなることがあると思います。簡単にいうと
+ <font color="Red">単独</font>で呼び出すことができるのが関数
+ <font color="Red">変数や値に対して</font>呼び出すのがメソッド

となります。
以下に、文字列を大文字にするメソッドを記載します。

```text:メソッド呼び出し形式
データ(変数・値).メソッド名(引数1,引数2,...)
```

```python:メソッド呼び出し例
print("abcd".upper())
```

```text:実行結果
ABCD
```
### メソッドの種類
メソッドは、データ型に紐づいた関数なので、呼び出せるデータの種類によってデータ型で異なる。

| 変数や値のデータの型 |  使用できるメソッド    | 
|:-----------------|:------------------|
| リスト型          | append(),pop(),extend()... |
| 辞書型            | get(),update(),update()... |

単独で呼び出す関数として以下のようなものがあります。またオブジェクトの後ろにはつかずに、操作する対象のデータを引数として指定する。以下は、文字を表示させる関数と入力されている文字列の文字数を返す関数です。二番目にリスト（配列）・三番目にディクショナリ（辞書）を用いています。

```text:関数呼び出し形式
関数名(引数(データ))
```

```python:関数呼び出し例
print("何か")
# 何か
len(["one", "two", "three"])
# 3
cooking = {"焼肉":3000,"お寿司":1500,"パン":600}
print(cooking["焼肉"])
# 3000
```
### ファイルを開く関数
ファイルを開くダイアログボックスを表示するには、tkinter.filedialogモジュールのaskopenfilename()関数を使います。以下にファイルのパス先と型を調べます。filename変数で関数を呼び出し、パス（住所）を代入します。今回は「インターネットの電子図書館、青空文庫へようこそ。」から「吾輩は猫である」の本をDLし、扱います。以下本のURLです。（https://www.aozora.gr.jp/cards/000148/card789.html）

```python: tkinter.filedialog function sample
from tkinter import filedialog

filename = filedialog.askopenfilename()
print(type(filename))
print(filename)
```

```text:実行結果
<class 'str'>
/ディレクトリ名/ファイル名
```

### open関数
open変数は、テキストファイルを読み込む・書き込むことができる形で開くための関数です。練習として上で求めた「吾輩は猫である」のパスを使ってopen関数を活用し、文章を表示させてみます。またopen関数はclose()メソッドでファイルを閉じる必要があるため、open関数を動かした後閉じます。今回は、日本語で書かれたtextファイルのため、open関数のオプションを指定する必要があり、種類としては大きく以下のようなものがあります。
open（ファイルのパス,mode=モード,encoding=文字コード）
モードとは、ファイルの開き方を指定する方法です。指定しない場合は、自動的にrの（既存のファイルの読み込み）設定になるため、編集したいときは指定することを忘れないようにしてください。

| モード |  効果    | 
|:-----------------:|:------------------:|
| r |  既存のファイルの読み込み |
| w |  既存のファイルの書き込み|
| x |  新規のファイルの書き込み|

次は、encodingについてです。ファイルを読み込んだ際の文字コードを指定することが出来ます。今回は日本語を指定したかったため shift_jisを指定しました。

```python:open関数の呼び出し形式
変数 = open(ファイルのパス, モード, encoding=文字コード種別)
変数.close()
```

```py:open関数の使用例
from tkinter import filedialog

filename = filedialog.askopenfilename()
print(type(filename))
print(filename)
data = open(filename,"r",encoding="shift_jis")
for row in data:
   print(row)
date.close()
```

```text:実行結果
<class 'str'>
/Users/ichirou/Downloads/wagahaiwa_nekodearu.txt
吾輩は猫である

夏目漱石
以下略
```
### len関数
lenは引数に指定したオブジェクトをの長さや要素の数を取得します。引数には、文字列やタプル・辞書などを指定することが出来ます。今回は、前回の「吾輩は猫である」の文字列の数を今まで使った関数・メソッドを活かして表示させます。ちなみに文字列の長さが初め自分はよく分からなかったのでそこも解説します。（よゆ〜って方はスルー推奨です）よくプログラミングをしていると見つける"Hello　World"。例えばこの文字も文字列ですが、数を数えると11になります。H,e,l,l,0,半角スペース,W,o,r,l,dで11文字になります。では実際に使ってみましょう。
```python:len function sample
filename = filedialog.askopenfilename()
data = open(filename,"r",encoding="shift_jis")
data2 = data.read()
print(len(data2))
```

```text:実行結果（ファイル内の文字数が表示される）
374949
```
### オブジェクトについて
![スクリーンショット 2023-05-28 22.45.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299864/bb8731d3-d855-f434-a559-4c1083c54532.png)
オブジェクトとは、オブジェクト指向で出てくる概念の一つで、「モノ」と例えられることが多いみたいです。そして単体で考えるより、クラスとの関係で考える方が分かりやすいので、今回はクラスとの関係で説明したいと思います。
### クラスについて
クラスとは「データや処理をひとまとめにしたもの」で、今までの関連するメソッドや関数をまとめてクラスを作成することで効率よくプログラムを組むことが出来ます。ちなみにこのようにメソッドや関数のような処理のパーツとオブジェクトと呼ばれるモノのパーツを別々にまとめてプログラムを作成する考え方を<font color="Red">オブジェクト指向</font>と呼びます。

シンプルに例えると、クラス「設計図」・クラスによって作られる「モノ（オブジェクト）」となります。また具体例な関係は、以下のようになります。
```py:classの構成要素
#クラス名を定義していく
class クラス名:
#メソッドを定義する
    def メソッド名.(self):
        #クラス変数定義をする
        sample=クラス変数
        処理内容
#クラス変数を取り出す
クラス名.sample
#インスタンス作成（オブジェクト作成）
インスタンス名=クラス名()
#メソッド呼び出し
インスタンス名.メソッド名()
```
classの後に任意のクラス名を指定し、その下にメソッドや変数を書きます。メソッドは、クラスと同じ要領で"def"キーワードの後にメソッド名を入れ、そこに引数を与えます。ちなみに前述した関数とメソッドの違いについて再確認すると単独で呼び出しできるのが「関数」・変数や値に対して呼び出すのがメソッドです。（メソッド：今回だとクラスの中で定義された関数で考えると分かりやすい・・・）クラスの中のメソッドやコンストラクタには、selfが含まれます。

+ <font color="Red">クラス変数</font>：<font color="Blue">class内のすべてのインスタンス間で共通</font>した値をもつ変数
+ <font color="Red">インスタンス変数</font>：<font color="Blue">それぞれのインスタンスごとに独立した</font>変数(コンストラクタの中で宣言された変数)、self.変数名で宣言する
***
まずクラス変数の定義はクラス内で以下のように行います。
`sample=クラス変数`
その後呼び出し方として、
`クラス名.sample`
にします。
次に一般的にインスタンス変数を生成するときは コンストラクタ __init__() 内で行います。
`self.インスタンス変数 = 値`
また、インスタンス変数にアクセスするときは以下のように記述します。
`self.インスタンス変数`
***
```py:コンストラクタの使用例
class Greeting:
    def __init__(self,greeting):
            self.greeting = greeting
japanese = Greeting("おはよう")
English = Greeting("Hello")
print(japanese.greeting)
print(English.greeting)
```
```py:実行結果
おはよう
Hello
```
今回は、挨拶をするクラスを作成します。

```py:classの使用例
class Greeting:
    def morning(self):
        print("おはようございます！")
    def evening(self):
        print("こんばんは！")
greeting = Greeting()
greeting.morning()
greeting.evening()
```

```py:実行結果
おはようございます！
こんばんは！
```

参考: 
[Pythonの辞書(dict)の基本的操作の全て]
（https://www.headboost.jp/python-everything-to-know-about-dict/）
[ファイルを開くダイアログボックスの表示]
(https://imagingsolution.net/program/python/tkinter/openfiledialog/)
[リストの数と文字列の長さを数える]
（https://python.ms/len/#_1-len）
[Pythonでファイルを読み込む方法！(read, readline)]
（https://codelikes.com/python-file-read/）
[オブジェクト指向とは？誰でもわかるようにやさしく解説]
(https://www.sejuku.net/blog/5973)
[オブジェクトとは]
（https://medium-company.com/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88/）
[Pythonのselfとは？使い方や注意点について解説]
(https://www.sejuku.net/blog/64106)
[Pythonのクラス変数とインスタンス変数]
(https://uxmilk.jp/41600)
[selfについて]
（https://kanda-it-school-kensyu.com/python-basic-contents/pbc_ch03/pbc_0303/）