Python学習(七)対象向け——パッケージ

8871 ワード

Python類のパッケージ
 
前節を受けて,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)