Cris 的Python筆記(十一):面向物件三大特徵之多型
阿新 • • 發佈:2018-11-19
'''
Python 的多型:一個物件可以以不同的形態去呈現,實現方式相比 Java更加簡單
因為動態語言的特點,Python 無法實現在程式碼指向前對方法引數進行檢查,所以只要滿足指定方法體的要求,任何資料型別的物件都可以作為該方法的實參
'''
class A:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, name) :
self._name = name
a = A("cris")
print(a.name)
class B:
def __init__(self, name):
self._name = name
@property
def name(self):
return self._name
@name.setter
def name(self, name):
self._name = name
def __len__(self):
return 20
b = B('simida')
print(b.name)
# 只要物件中含有name 屬性,那麼就可以當作引數傳遞
def getName(obj):
print(obj.name)
getName(a)
getName(b)
def getName2(obj):
if isinstance(obj, A):
print(obj.name)
getName2(a)
getName2(b) # 沒有輸出
# len()
# 之所以一個物件能通過len()來獲取長度,是因為物件中具有一個特殊方法__len__
# 換句話說,只要物件中具有__len__特殊方法,就可以通過len()來獲取它的長度
nums = [1, 2, 3]
print(len(nums)) # 3
name = 'james'
print(len(name)) # 5
print(len(b)) # 20
# 面向物件的三大特徵:
# 封裝
# - 確保物件中的資料安全
# 繼承
# - 保證了物件的可擴充套件性
# 多型
# - 保證了程式的靈活性