Python学習(七)対象向け——パッケージ
8871 ワード
Python類のパッケージ
前節を受けて,Studentクラスの定義とインスタンス化を学び,各インスタンスはそれぞれのnameとscoreを持つ.学生の成績を印刷する必要がある場合は、関数print_を定義します.score()
この関数はクラス外の関数で、次のようになります.
Studentインスタンス自体がこれらのデータを持っている以上、これらのデータにアクセスするには、外部の関数からアクセスする必要はありません.Studentクラスの内部でデータにアクセスする関数を直接定義することができます.これで、データを「カプセル化」しました.
「カプセル化」は抽象的に得られたデータと行為(または機能)を結合し、有機的な全体(すなわちクラス)を形成することである.パッケージの目的は、セキュリティの強化とプログラミングの簡素化です.ユーザーは、特定の実装の詳細を理解する必要はありません.外部インタフェース、特定のアクセス権を通じてクラスのメンバーを使用するだけです.
これらのカプセル化データの関数はStudentクラス自体に関連付けられており,クラスと呼ぶ方法である.では、クラスのメソッドをどのように定義しますか?
オブジェクトself自体を使用するには、前例を参照してprint_score()関数をクラスと書く方法(Python 2.7以降のバージョン、推奨.format出力書き方):
クラスを定義する方法:最初のパラメータがselfである以外は、通常の関数と同じです.
インスタンス呼び出し方法:selfが渡さない以外は、インスタンス変数で直接呼び出す必要があります.他のパラメータは正常に入力されます.クラスのメソッドがselfのみで、他に必要ない場合はinstance_のみが呼び出されます.name.function_name()
これにより、外部からStudioクラスを見ると、インスタンスの作成にはnameとscoreが必要であり、どのように印刷するかは、Studioクラスの内部で定義されており、これらのデータと論理は「カプセル化」されており、呼び出しは簡単ですが、内部実装の詳細はわかりません.
パッケージのもう一つの利点は、Studentクラスに新しい方法を追加できることです.こちらの方法では、compare関数を新たに定義するなど、パラメータを要求することもできます.以下のようにします.
前節を受けて,Studentクラスの定義とインスタンス化を学び,各インスタンスはそれぞれのnameとscoreを持つ.学生の成績を印刷する必要がある場合は、関数print_を定義します.score()
この関数はクラス外の関数で、次のようになります.
1 class Student(object):
2 def __init__(self, name, score):
3 self.name = name
4 self.score = score
5
6 May = Student("May",90) #
7 Peter = Student("Peter",85)
8 print(May.name, May.score)
9 print(Peter.name, Peter.score)
10
11 def print_score(Student): # print_score(Student)
12 # print("%s's score is: %d" %(Student.name,Student.score)) # print
13 print("{0}'s score is: {1}".format(Student.name,Student.score)) # Python 2.7 + .format
14 print_score(May)
15 print_score(Peter)
Studentインスタンス自体がこれらのデータを持っている以上、これらのデータにアクセスするには、外部の関数からアクセスする必要はありません.Studentクラスの内部でデータにアクセスする関数を直接定義することができます.これで、データを「カプセル化」しました.
「カプセル化」は抽象的に得られたデータと行為(または機能)を結合し、有機的な全体(すなわちクラス)を形成することである.パッケージの目的は、セキュリティの強化とプログラミングの簡素化です.ユーザーは、特定の実装の詳細を理解する必要はありません.外部インタフェース、特定のアクセス権を通じてクラスのメンバーを使用するだけです.
これらのカプセル化データの関数はStudentクラス自体に関連付けられており,クラスと呼ぶ方法である.では、クラスのメソッドをどのように定義しますか?
オブジェクトself自体を使用するには、前例を参照してprint_score()関数をクラスと書く方法(Python 2.7以降のバージョン、推奨.format出力書き方):
1 class Student(object):
2 def __init__(self, name, score):
3 self.name = name
4 self.score = score
5
6 def print_score(self):
7 print("{self.name}'s score is: {self.score}".format(self=self)) # Python 2.7 + .format
8
9 May = Student("May",90)
10 Peter = Student("Peter",85)
クラスを定義する方法:最初のパラメータがselfである以外は、通常の関数と同じです.
インスタンス呼び出し方法:selfが渡さない以外は、インスタンス変数で直接呼び出す必要があります.他のパラメータは正常に入力されます.クラスのメソッドがselfのみで、他に必要ない場合はinstance_のみが呼び出されます.name.function_name()
これにより、外部からStudioクラスを見ると、インスタンスの作成にはnameとscoreが必要であり、どのように印刷するかは、Studioクラスの内部で定義されており、これらのデータと論理は「カプセル化」されており、呼び出しは簡単ですが、内部実装の詳細はわかりません.
パッケージのもう一つの利点は、Studentクラスに新しい方法を追加できることです.こちらの方法では、compare関数を新たに定義するなど、パラメータを要求することもできます.以下のようにします.
1 class Student(object):
2 def __init__(self, name, score):
3 self.name = name
4 self.score = score
5
6 def print_score(self):
7 print("{self.name}'s score is: {self.score}".format(self=self)) # Python 2.7 + .format
8
9 def compare(self,s):
10 if self.score>s:
11 print("better than %d" %(s))
12 elif self.score==s:
13 print("equal %d" %(s))
14 else:
15 print("lower than %d" %(s))
16
17 May = Student("May",90)
18 Peter = Student("Peter",85)
19
20 May.print_score()
21 Peter.print_score()
22
23 May.compare(100)
24 May.compare(90)
25 May.compare(89)