python學習——魔術方法與訪問限制

魔術方法

類本身有許多內置方法,這些內置方法的開頭與結尾都是雙底線字符

  1. init(self):這是類的構造方法,當創建一個類的實例時,就會調用此方法。下列 案例設置類的構造方法是打印類實例本身
class myClass:
	def __init__(self):
	print (self)

2、str(self):此方法被 str()內置函數與 print 函數調用,用來設置對象以字符串類型出現時如何顯示,str()函數的返回值是一個字符串對象。

class myClass:
	def __init__(self, arg):
		self.name = arg
	def __str__(self):
		return self.name

3、_del __(self):此方法用於刪除類對象。

lass myClass1:
    def __init__(self, arg):
        self.name = arg
    def __del__(self):
        print ("你不能刪除此類的對象")

x = myClass1("Andre")
del x

當然魔術方法還有很多,我這裏只是列舉了一些常用的,

訪問限制

類的內部可以定義屬性和方法,而在類的外部則可以直接調用屬性或方法來操作數據,從而隱藏了類內部的複雜邏輯。但是,Python 並沒有對屬性和方法的訪問權限進行限制。爲了保證類內部的某些屬性或方法不被外部訪問,可以在屬性或方法名前面添加單下劃線(_foo)、雙下劃線(__foo)從而限制訪問權限。其中,單下劃線、雙下劃線

1、單下劃線:(類似java的包訪問權限)

_foo:以單下劃線開頭的表示 protected(保護)類型的成員,只允許 類本身和子類 進行訪問,
但不能使用“from module import *”語句導入。

lass Swan:
    '''天鵝類'''
    _neckswan = '天鵝的脖子很長'               # 定義保護屬性
    def __init__(self):
      print("__init__():", Swan._neckswan)   # 在實例方法中訪問保護屬性

swan = Swan()                           # 創建 Swan 類的實例
print("直接訪問:" , swan._neckswan)     # 保護屬性可以通過實例名訪問

2、雙下劃線:
__foo:雙下劃線表示 private(私有)類型的成員,只允許定義該方法的類本身進行訪問,而且也不能通過類的實例進行訪問,但是可以通過“類的實例名.類名__xxx”方式訪問

class Student():
    '''學生類'''
    __age=18                      # 定義私有屬性
    def __init__(self):
        print("__init__:",Student.__age)      # 在實例方法中訪問私有屬性

stu=Student()                # 創建 Swan 類的實例

print("加入類名:",stu._Student__age)      # 私有屬性,可以通過“實例名._類名__xxx”方式訪問

print("直接訪問",stu.__age)      #     私有屬性不能通過實例名訪問,出錯
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章