Python:Python の特徴
初めに
本記事では、Python がどのような言語でどのような特徴をもつのか、何ができるのかまとめます。
Index
Python の紹介
Python とは
Python(パイソン) は1990年代初頭ごろから公開されているプログラミング言語で、わかりやすく、実用的な言語として、広く使われ続けています。
Pythonはいわゆるスクリプト言語で、実行性能よりも使いやすさを優先した構造になっています。C言語などと比べれば実行速度は劣りますし、メモリ使用量も多くなりますが、「読みやすさ・わかりやすさ」をとても重視していて、Pythonを知らない人でも、理解しやすいようにデザインされています。
補足
動的型付け・静的型付け
プログラミング言語は、動的型付け言語と静的型付け言語に分類されます。二つの違いは次の通りです。
動的型付け言語 | 実行時に型が決まる |
静的型付け言語 | コンパイル時に型が決まる |
動的型付けは実行時に変数の方を解釈します。そのため、型の変更が比較的容易です。動的型付け言語の代表的な例である Python のコードを見てみます。
x = 5 # 整数型として解釈される y = "Hello" # 文字列型として解釈される z = 3.14 # 浮動小数点数型として解釈される x = "Python" # 同じ変数でも別の型に変更可能
上記の例では、x は整数型でしたが、途中で文字列型に変更されています。
静的型付け言語の例として、C# が挙げられます。C# は変数の方は宣言時に明示的に指定し、その後の変更は許容されません。
int x = 5; string y = "Hello"; double z = 3.14; // コンパイルエラー: 型を変更することは許されない // x = "C#";
動的型付け言語は柔軟性があり、型の定義をする必要がないため、コードを簡潔に書くことができる反面、実行時のエラーに注意する必要があります。
一方で、静的型付け言語は型の厳格なチェックを行うため、コンパイル時にエラーを検出できます。これにより、安全性や保守性が向上しますが、動的型付け言語と比較するとコードが冗長になります。
オブジェクト指向
オブジェクト指向は、コードを再利用可能なオブジェクトとして考えるシステム構築の仕方です。Python のほかにも C# や Java がオブジェクト指向型プログラミング言語の例としてよく挙げられます。
オブジェクト指向の三大要素として、継承、カプセル化、ポリモーフィズムがあります。
(継承)
継承は、既存のクラスを基にして新しいクラスを定義する仕組みです。新しいクラスは、既存のクラス(親クラスまたはスーパークラス)の属性とメソッドを受け継ぐことができます。これにより、コードの再利用と階層的な構造を実現できます。
class Animal: def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" dog = Dog() print(dog.speak()) # 出力: "Woof!" cat = Cat() print(cat.speak()) # 出力: "Meow!"
上記の例では、Animalクラスを継承したDogクラスとCatクラスがあります。子クラスは親クラスのspeakメソッドをオーバーライドして独自の振る舞いを実装しています。
(カプセル化)
カプセル化は、オブジェクトの内部状態を隠蔽し、外部からの直接的なアクセスを制限する概念です。これにより、クラス内部の実装の詳細が隠され、コードの保守性やセキュリティが向上します。
class Student: def __init__(self, name, age): self.name = name self.__age = age # プライベートな変数 def get_age(self): return self.__age student = Student("Alice", 20) print(student.name) # パブリックな属性にアクセス # コンパイルエラー: プライベートな属性に直接アクセスしようとするとエラー # print(student.__age) print(student.get_age()) # プライベートな属性にアクセスするための公開メソッド
Studentクラスでは、__ageという名前のプライベートな属性を定義し、外部から直接アクセスできないようにしています。代わりに、公開メソッドであるget_ageメソッドを介して属性にアクセスしています。
(ポリモーフィズム)
ポリモーフィズムは、異なるクラスが同じメソッド名を持ち、それぞれ独自の実装を提供する能力を指します。これにより、同じメソッド名を使用して異なるオブジェクトの振る舞いを制御できます。
class Shape: def area(self): pass class Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return 3.14 * self.radius * self.radius class Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height shapes = [Circle(5), Rectangle(4, 6)] for shape in shapes: print(shape.area())
上記の例では、Shapeクラスを継承するCircleクラスとRectangleクラスがあります。それぞれのクラスはareaメソッドをオーバーライドして図形の面積を計算しています。リスト内の異なるオブジェクトでも同じメソッド名で面積を計算できるため、ポリモーフィズムが実現されています。