#多型 鴨子型別
class
cat():
defspeak
(self)
:print
('喵喵'
)class
dog():
defspeak
(self)
:print
('汪汪'
)def
demo
(a):
a.speak(
)demo(cat())
demo(dog(
))
類高階
#類的高階
class
dog():
""" gou
"""num =
0def
__init__
(self,name)
: self.name = name
b = dog(
'000'
)print
(dog.__name__,
type
(dog.__name__)
)#得到類名字串
print
(dog.__dict__)
#檢視屬性 dir檢視類的詳細資訊
print
(dog.__doc__.strip())
#文件字串
print
(dog.__module__)
#模組名,如果在當前模組,輸出 __main__
print
(dog.__bases__)
#檢視父類資訊,返回的為乙個元組
# __mro__ 解析類的繼承順序
print
(b.__dict__)
#得到物件的屬性字典
print
(dir
(b))
#物件的詳細資訊
print
(b.__class__)
#獲取物件所屬的類
print
(b.__module__)
#獲取在哪個模組執行的
#issubclass() 判斷乙個類是否是另乙個類的子類
print
(hasattr
(b,'age'))
#判斷傳進來的的物件是否有指定的屬性,重要
print
(hasattr
(b,'demo'))
#判斷傳進來的的物件是否有指定的行為,重要
print
(getattr
(b,'age'
,'沒有該屬性'))
#獲取指定的屬性
print
(getattr
(b,'name'
,'沒有該屬性'
))
元類:type 動態建立
def
eat(self)
:print
('愛吃屎'
pickle 方式
class
dog():
""" gou
"""num =
0def
__init__
(self,name)
: self.name = name
defdemo
(self)
:pass
b = dog(
'000'
)list1 =[20
,30,'eeeee'
,true
]import pickle
# with open('004.txt','wb') as f:
# pickle.dump(b,f)
# # pickle.dump(list1,f)
with
open
('004.txt'
,'rb'
)as f:
obj = pickle.load(f)
print
(obj.__dict__)
shelve
import shelve
# with shelve.open('005.txt','c') as db:
# db['list1'] = [1,2,3]
# db['dog'] = 123
with shelve.
open
('005.txt'
)as db:
for key in db:
print
(key,db[key]
)# with shelve.open('005.txt',writeback= true) as f:
# print(f['dog'])
# f['dog'] = 789
# print(f['dog'])
物件導向高階特性 元類type
1 通過分支語句動態建立類 因為類也是物件,執行時在函式中使用class關鍵字動態的建立類。當使用class關鍵字時,python直譯器自動建立這個物件。通過分支語句動態建立類 defcreate class name if name foo class foo object pass return...
物件導向(五) 類的多型
繼承的好處是乙個指向子類的指標與乙個指向基類的指標是型別相容的 type compatible 繼承的好處是乙個指向子類的指標與乙個指向基類的指標是type compatible的,如以下 所示 include using namespace std class cfather class c pu...
python高階 物件導向程式設計六 元類
typer produce class produce obj type稱謂元類,是所有類的類,利用type控制類的行為 模擬class關鍵字建立類的過程 建立類的兩種方式 方式一 class foo def func self print from func 方式二 x 1 def func se...