プライベート属性とプライベートメソッド(パッケージ化)
1904 ワード
Pythonはクラスのメンバーに対して厳格なアクセス制御制限を持たず,他のオブジェクト向け言語とは異なる.
プライベート属性とプライベートメソッドについては、次のポイントがあります.は、通常、2つの下線の先頭の属性がプライベート(private)であることを約束します.その他はパブリック(public). クラス内でプライベート属性(メソッド) にアクセス可能クラス外部はプライベート属性(メソッド) に直接アクセスできない.クラス外部から「_クラス名__プライベート属性(メソッド)名」でプライベート属性(メソッド)【注】メソッドにアクセスできるのも本質的に属性です!実行できるにすぎない.
印刷されたPersonオブジェクトのすべてのプロパティからわかります.プライベート属性「_age」は、実際に記憶する際に「_Person__age」という属性に従って記憶される.これは私たちが直接「_age」を使うことができず、「_Person__age」を使うことができる根本的な原因です.
プライベート属性とプライベートメソッドについては、次のポイントがあります.
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」を使うことができる根本的な原因です.