魔術方法
類本身有許多內置方法,這些內置方法的開頭與結尾都是雙底線字符
- 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) # 私有屬性不能通過實例名訪問,出錯