プライベート属性とプライベートメソッド(パッケージ化)

1904 ワード

Pythonはクラスのメンバーに対して厳格なアクセス制御制限を持たず,他のオブジェクト向け言語とは異なる.
プライベート属性とプライベートメソッドについては、次のポイントがあります.
  • は、通常、2つの下線の先頭の属性がプライベート(private)であることを約束します.その他はパブリック(public).
  • クラス内でプライベート属性(メソッド)
  • にアクセス可能
  • クラス外部はプライベート属性(メソッド)
  • に直接アクセスできない.
  • クラス外部から「_クラス名__プライベート属性(メソッド)名」でプライベート属性(メソッド)【注】メソッドにアクセスできるのも本質的に属性です!実行できるにすぎない.
  • 
    class Employee:
        __employee = "   " #     .    dir     _Employee__employee
        def __init__(self,name,age):
            self.name = name
            self.__age = age #      
    
        def say_company(self):
            print("     :",Employee.__employee) #             
            print(self.name,"    :",self.__age)
            self.__work()
        def __work(self): #          dir     _Employee__work
            print("  !    ,    !")
    
    p1 = Employee("   ",32)
    print(p1.name)
    print(dir(p1)) #    
    p1.say_company()
    print(p1._Employee__age) #                  。   dir       :_Employee__age
    #print(p1.__age) #        ,  
    # p1.__work() #        ,  
    
    
        :
       
    ['_Employee__age', '_Employee__employee', '_Employee__work', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_company']
         :    
            : 32
      !    ,    !
    32
    

    印刷されたPersonオブジェクトのすべてのプロパティからわかります.プライベート属性「_age」は、実際に記憶する際に「_Person__age」という属性に従って記憶される.これは私たちが直接「_age」を使うことができず、「_Person__age」を使うことができる根本的な原因です.