Python 基礎第二十三天 反射

2022-08-03 08:06:12 字數 3419 閱讀 7540

今日主要內容

1.物件導向高階特性---反射

2.內建函式和內建方法補充

1.什麼是反射:

通過內建函式getattr(),hasattr(),setattr(),delattr()實現,在類外通過對字串的操作,能夠將類內同名的靜態變數,方法,如物件屬性是無法取到值的.

也可以理解為:

***正常情況下如果可以拿到這個變數 那麼如有有這個變數的字串形式 就是用反射可以獲取到這個值

使用字串資料型別的變數名 訪問乙個命名空間中的名字

找乙個屬性 ,直接就可以找到這個屬性的值

找乙個方法 ,找到的是這個方法的記憶體位址

例:

class

a: role = '

person

'def

func(self):

a = 'b'

print("

*" *self)

print(getattr(a,'

role

')) #

靜態變數的反射

print(getattr(a,'

func

')) #

類中方法取到的是記憶體位址

getattr(a,'

func

')(3) #

類中方法的反射

**類使用類命名空間中的名字

例:下面例中使用物件名進行獲取

class

a: role = '

person

'def

__init__

(self):

self.money = 500

deffunc(self):

print('

*'*10)

a = a() #

例項化a 為物件名稱

print

(a.func)

getattr(a,

'func

')()

print(getattr(a,'

money

'))

***物件使用物件能用的方法和屬性

內建函式的介紹:

hasattr() 判斷乙個命名空間中有沒有這個名字

getattr() 從命名空間中獲取這個名字對應的值

模組含義:模組就是類所在python的檔名

例:

def

login():

print('

執行login功能')

defregister():

print('

執行register功能')

import

sysprint(sys.modules['

__main__

']) #

func = input('

>>>')

if hasattr(sys.modules['

__main__

'],func)#

檢查輸入的資訊,是否a.py有

getattr(sys.modules['

__main__

'],func)() #

有就執行該函式

類使用類命名空間中的名字

getattr(類名,'名字')

物件使用物件能用的方法和屬性

getattr(物件名,'名字')

模組使用模組中的名字

匯入模組

getattr(模組名,'名字')

import

os getattr(os,

'rename

')('

user

','user_info

')

getattr一定要和hasattr配合使用

setattr  # 修改和新建

delattr  # 刪除乙個屬性

setattr

例:

class

a:

def__init__

(self,name):

self.name =name

defwahaha(self):

print('

wahahahahaha')

a = a('

alex')

a.name

a.wahaha()

getattr(a,

'name')

print(a.__dict__

)setattr(a,

'age

',18) #

增加了乙個屬性

print(a.__dict__

)結論:

wahahahahaha

delattr

例:

class

a:

def__init__

(self,name):

self.name =name

defwahaha(self):

print('

wahahahahaha')

a = a('

alex')

a.name

a.wahaha()

getattr(a,

'name')

print(a.__dict__

)setattr(a,

'age

',18)

print(a.__dict__

)delattr(a,

'age')

print(a.__dict__

)結論:

wahahahahaha

2.內建函式,方法補充

isinstance :判斷乙個物件和乙個類有沒有血緣關係

issubclass:issubclass(子類名,父類名) 如果返回true,說明有繼承關係.判斷子類和父類是否有繼承關係

isinstance與type方法類似,都能判斷資料型別,但是isinstance還能還能檢測是否有繼承關係

例:

class b:pass

class a(b):pass

a =a()

print

(isinstance(a,a))

print(isinstance(a,b)) #

能夠檢測到繼承關係

print(type(a) is

a)print(type(a) is b) #

type只單純的判斷類

#判斷乙個物件和乙個類有沒有血緣關係

isinstance(a,a)

__hash__ :object類自帶的方法.只有類實現了__hash__,hash()才能用

__len__:放在類中的計算傳值結果的長度,數量  同len(),類中含有__len__方法,才能使用len()函式

第二十三天

1 使用 koa 搭建伺服器 const koa require koa 路由請求 context ctx 上下文 包含req和res ctx.body hello koa2 2 如何配置 koa 路由 const koa require koa 建立路由物件 const router requir...

冥想第二十三天

早上進行了快樂的事情,並跑了步,非常舒服,西四環有點堵,提前給朋友發了資訊讓他們避開。這也是為朋友多做的一些事情,感謝朋友。又來公園裡面轉了兩圈,聽著 你的答案 渾身舒服。輕鬆,保持輕鬆,進行一天的開心快樂的工作吧,上午工作到11 40左右感覺視線有些模糊,就是困了,然後告訴自己就是困了。平穩的度過...

學python的第二十三天

import 方式匯入模組 import tool.getsum.add 匯入模組,優先會從啟動檔案的當前目錄開始尋找 如果找到,就使用 如果找不到,會在系統模組存放目錄去 tool.getsum.add.add2num 2,5 from import 匯入模組 from tool import a...