pythonのパッケージ

10586 ワード

参照先:https://www.cnblogs.com/feeland/p/4415645.htmlパッケージの目的は、プライバシーを守り、他人に知られたくないものをパッケージすることです.
Studentクラスとインスタンス化が定義され、各インスタンスにはそれぞれのnameとscoreがあります.学生の成績を印刷する必要がある場合は、関数print_を定義します.score()は、クラス外の関数です.
class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score

May = Student("May",90)                      #         
Peter = Student("Peter",85)
print(May.name, May.score)
print(Peter.name, Peter.score)

def print_score(Student):                    #     print_score(Student)
    # print("%s's score is: %d" %(Student.name,Student.score))             #    print   
    print("{0}'s score is: {1}".format(Student.name,Student.score))        #      Python 2.7 + .format    
print_score(May)    
print_score(Peter)

Studentインスタンス自体がこれらのデータを持っている以上、これらのデータにアクセスするには、外部の関数からアクセスする必要はありません.Studentクラスの内部でデータにアクセスする関数を直接定義することができます.これで、データを「カプセル化」しました.「カプセル化」は抽象的に得られたデータと行為(または機能)を結合し、有機的な全体(すなわちクラス)を形成することである.パッケージの目的は、セキュリティの強化とプログラミングの簡素化です.ユーザーは、特定の実装の詳細を理解する必要はありません.外部インタフェース、特定のアクセス権を通じてクラスのメンバーを使用するだけです.
これらのカプセル化データの関数はStudentクラス自体に関連付けられており,クラスと呼ぶ方法である.では、クラスのメソッドをどのように定義しますか?オブジェクトself自体を使用するには、前例を参照してprint_score()関数をクラスと書く方法(Python 2.7以降のバージョン、推奨.format出力書き方):
class Student(object):
    def __init__(self, name, score): 
        self.name = name
        self.score = score

    def print_score(self):
        print("{self.name}'s score is: {self.score}".format(self=self))        # Python 2.7 + .format    
        
May = Student("May",90)        
Peter = Student("Peter",85)

クラスを定義する方法:最初のパラメータがselfである以外は、通常の関数と同じです.インスタンス呼び出し方法:selfが渡さない以外は、インスタンス変数で直接呼び出す必要があります.他のパラメータは正常に入力されます.クラスのメソッドがselfのみで、他に必要ない場合はinstance_のみが呼び出されます.name.function_name()これにより、外部からStudioクラスを見ると、インスタンスの作成にはnameとscoreが必要であり、どのように印刷するかは、Studioクラスの内部で定義されており、これらのデータと論理は「カプセル化」されており、呼び出しは容易であるが、内部実装の詳細は知らない.
パッケージのもう一つの利点は、Studentクラスに新しい方法を追加できることです.こちらの方法では、compare関数を新たに定義するなど、パラメータを要求することもできます.以下のようにします.
class Student(object):
    def __init__(self, name, score): 
        self.name = name
        self.score = score

    def print_score(self):
        print("{self.name}'s score is: {self.score}".format(self=self))        # Python 2.7 + .format    
        
    def compare(self,s):
        if self.score>s:
            print("better than %d" %(s))
        elif self.score==s:
            print("equal %d" %(s))
        else:
            print("lower than %d" %(s))

May = Student("May",90)        
Peter = Student("Peter",85)        

May.print_score()
Peter.print_score()

May.compare(100)
May.compare(90)
May.compare(89)