物件導向之反射

2021-10-01 02:57:43 字數 2155 閱讀 9994

isinstance與issubclass是python的內建模組:

# isinstance

class

foo:

pass

class

boo:

pass

foo_obj = foo(

)boo_obj = boo(

)print

(isinstance

(foo_obj, foo)

)# true

print

(isinstance

(boo_obj, foo)

)# false

#issubclass

class

father

:pass

class

sub(father)

:pass

class

foo:

pass

print

(issubclass

(sub,father)

)#true

print

(issubclass

(foo,father)

)#false

反射指的是通過 「字串」 對 物件的屬性進行操作。

注意: 反射的四個方法是python內建的。

class

foo:

def__init__

(self,x,y)

: self.x = x

self.y = y

foo_obj = foo(10,

20)#hasattr 通過字串x 判斷物件中是否有 x屬性

print

(hasattr

(foo_obj,

'x')

)#true

print

(hasattr

(foo_obj,

'z')

)#false

#getattr 通過 字串 獲取物件的屬性或方法

print

(getattr

(foo_obj,

'x')

)#10

#若屬性不存在,則返回預設值

res =

getattr

(foo_obj,

'z',

'預設值'

)print

(res)

#預設值

#setattr

# 為foo_obj設定乙個屬性z,值為30

setattr

(foo_obj,

'z',30)

print

(hasattr

(foo_obj,

'z')

)#true

#delattr

delattr

(foo_obj,

'z')

print

(hasattr

(foo_obj,

'z')

)#false

反射應用:

class

filecontrol

:def

run(self)

:while

true

: user_input =

input()

.strip(

)# 通過使用者輸入的字串判斷方法是否存在,然後呼叫相應的方法

ifhasattr

(self,user_input)

: func =

getattr

(self,user_input)

func(

)else

:print

('輸入有誤'

)def

upload

(self)

:print

('檔案正在上傳'

)def

download

(self)

:print()

filecontrol_obj = filecontrol(

)filecontrol_obj.run(

)

物件導向之反射

反射 python中的反射功能是由以下四個內建函式提供 hasattr getattr setattr delattr,改四個函式分別用於對物件內部執行 檢查是否含有某成員 獲取成員 設定成員 刪除成員。class foo object def init self self.name wupeiqi...

物件導向之反射運用

import sysclass apache object def init self,tcp self.tcp tcp defstart self print apache is starting,host id is s self.tcp defstop self print apache is...

物件導向 反射

內建函式 1.isinstance 判斷乙個物件和乙個類有沒有血緣關係class a pass class b a pass a b print isinstance a,b true print isinstance a,a true print type a is b true print ty...