pythonクラスのパッケージ

1780 ワード

カプセル化:クラスを設計する際に、意図的にいくつかの属性と方法をクラスの内部に隠すことで、「クラスオブジェクト.属性名」(または「クラスオブジェクト.方法名(パラメータ)」)の形式でこれらの属性(または方法)を直接呼び出すことができず、非表示の方法で間接的にこれらの非表示の属性と方法を操作するしかない.
  • パッケージメカニズムはクラス内部データ構造の完全性を保証し、外部が内部データに与える影響をよく回避し、プログラムのメンテナンス性を高めた.
  • は、クラス内の属性またはメソッドに対するユーザの不合理な操作を回避する.
  • は、コードの多重化を提供する.

  • pythonクラスがどのようにカプセル化されるかは、他のオブジェクト向けのプログラミング言語とは異なり、pythonクラスの変数と関数が共有されていないのはプライベートです.
  • public:共通属性のクラス変数とクラス関数で、クラスの外部、クラス内部およびサブクラスでは、
  • に正常にアクセスできます.
  • private:プライベート属性のクラス変数とクラス関数は、本クラスの内部でのみ使用され、クラスの外部およびサブクラスは使用できません.

  • しかし、pythonはpublic、privateなどの修飾子を提供していません.クラスのカプセル化を実現するために、pythonは次の方法を採用しました.
  • デフォルトでは、pythonクラスの変数とメソッドは共通であり、名前の前に下線はありません()
  • クラスの変数と関数の場合、その名前は二重下線""になります.最初は、変数または関数がプライベートです.
  • 下線「」最初のクラス属性とクラスメソッドは、クラスオブジェクトを介して正常にアクセスできるが、プライベート属性とプライベートメソッドとして一般的に扱われています.
  • 二重下線の先頭と末尾のクラスメソッド(例えば__init_()の場合)ではpython内部で定義され、自分で定義する場合は、このフォーマットを使用しないでください.
  • class Person:
        def setname(self, name):
            if len(name) < 3:
                raise ValueError('        3!')
            self.__name = name
            
        def getname(self):
            return self.__name
        
        # name  setter getter  
        name = property(getname, setname)
        
        def setage(self, age):
            if age < 100:
                self.__age = age
            else:
                raise ValueError('      100!')
        
        def getage(self):
            return self.__age
        
        # age  getter setter  
        age = property(getage, setage)
        
        #      
        def __display(self):
            print(self.__name, "  ", self.__age, " 。")
            
    xiaobai = Person()
    xiaobai.name = "xiaobai"
    xiaobai.age = 20
    print(xiaobai.name)
    print(xiaobai.age)
    xiaobai
    20