instance 和 issubclass
class
foo:
pass
foo = foo(
)print
(isinstance
(foo, foo)
)print
(isinstance(1
,int))
true
true
class
foo:
pass
foo = foo(
)print
(isinstance
(foo, foo)
)print
(isinstance(1
,int))
class
foo:
pass
class
bar(foo)
:pass
print
(issubclass
(bar,foo)
)true
所謂反射,是指程式可以訪問、檢測和修改它本身狀態或者行為的一種能力(自省)
在python中,物件導向中的反射是指通過字串的形式操作物件的相關屬性。
四個可以實現自省的函式
attribute
getatter
setatter
delatter
class
foo:
f ='類的靜態變數'
def__init__
(self, name, age)
: self.name = name
self.age = age
defsay(self)
:print
('hello,%s'
% self.name)
obj = foo(
'tom',22
)# # 檢測是否含有某個屬性
print
(hasattr
(obj,
'name'))
print
(hasattr
(obj,
'say'))
## # 獲取屬性
gt =
getattr
(obj,
'name'
)print
(gt)
gtf =
getattr
(obj,
'say'
)gtf(
)# gtf1 = getattr(obj,'hello') #不存在報錯
print
(obj.__dict__)
# 屬性值通過字典輸出
# # 設定屬性
setattr
(obj,
'good man'
,true
)setattr
(obj,
'show_name'
,lambda self: self.name +
'good man'
)print
(obj.__dict__)
print
(obj.show_name(obj))#
# 刪除屬性
delattr
(obj,
'show_name'
)print
(obj.__dict__)
# delattr(obj, 'hello') #不存在報錯
true
true
tomhello,tom
tomgood man
聯想,字串、列表、元組可以通過索引值引用值,字典可以通過關鍵字引用值。
##item系列
class
foo:
def__init__
(self, name)
: self.name = name
def__getitem__
(self, item)
:print
(self.__dict__[item]
)def
__setitem__
(self, key, value)
: self.__dict__[key]
= value
def__delitem__
(self, key)
:print
('del obj[key]時:'
) self.__dict__.pop(key)
def__delattr__
(self, item)
:print
('del obj.key時:'
) self.__dict__.pop(item)
obj1 = foo(
'tom'
)obj1[
'age']=
18obj1[
'age1']=
19print
(obj1.__dict__)
del obj1[
'age'
]del obj1.age1
print
(obj1.__dict__)
obj1[
'name']=
'jack'
print
(obj1.__dict__)
del obj[key]時:
del obj.key時:
##__del__
析構方法,當物件在記憶體被釋放,就會自動觸發執行
一般不需要自定義
class
foo:
def__del__
(self)
:print
('執行del函式了'
)obj = foo(
)del obj
執行del函式了
class
cat:
def__init__
(self,new_name,new_age)
: self.name = new_name
self.age = new_age
def__str__
(self)
:return
'名字是:%s,年齡是:%s'
%(self.name,self.age)
obj = cat(
'lucky',1
)print
(obj)
名字是:lucky,年齡是:1
python物件導向2
主要通用 新增到屬性名前,可以讓該屬性得到乙個保護 class wudang name 武當 kongfu list aaa bbb ccc wd wudang print wd.name print wd.kong list 定義類的時候,如果希望繼承自另外乙個類 可以通過 class 類名 父類...
Python 物件導向 2
組合 適合沒干係的橫向類,比如池塘,烏龜,魚 把類的例項化放到新類裡面 屬性名和方法名相同,屬性會覆蓋掉方法 繫結 方法需要例項才能被呼叫!這種限制即繫結 用self接受繫結 class ball def xx self,a print b ball b.xx 123 刪除del ball類時,b....
Python 物件導向程式設計2
start object 類是所有類的父類,它定義了好多方法,重寫這些方法我們可以定製自己的類。我們可以比較兩個數字的大小,那我們自定義的類可不可以呢?其實很簡單,我們只需要重寫 object 類中定義的比較方法即可。class mynumber 初始化屬性 def init self,num se...