python中的對映 一文讀懂Python中的對映

2021-10-12 11:12:28 字數 3040 閱讀 8207

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

獲取成員: getattrclass foo:

def __init__(self, name, age):

self.name = name

self.age = age

obj = foo('klvchen', 18)

inp = input('>>>')

v = getattr(obj, inp)

print(v)

執行結果:>>>name

klvchenclass foo:

def __init__(self, name, age):

self.name = name

self.age = age

def show(self):

return "%s-%s" %(self.name, self.age)

obj = foo('klvchen', 18)

func = getattr(obj, 'show')

print(func)

res = func()

print(res)

執行結果:>

klvchen-18

檢查是否含有成員: hasattrclass foo:

def __init__(self, name, age):

self.name = name

self.age = age

def show(self):

return "%s-%s" %(self.name, self.age)

obj = foo('klvchen', 18)

print(hasattr(obj, 'name1'))

執行結果:false

設定成員: setattrclass foo:

def __init__(self, name, age):

self.name = name

self.age = age

def show(self):

return "%s-%s" %(self.name, self.age)

obj = foo('klvchen', 18)

# print(hasattr(obj, 'name1'))

setattr(obj, 'key', 'value')

print(obj.key)

執行結果:value

刪除成員: delattrclass foo:

def __init__(self, name, age):

self.name = name

self.age = age

def show(self):

return "%s-%s" %(self.name, self.age)

obj = foo('klvchen', 18)

print(obj.name)

delattr(obj, 'name')

print(obj.name)

執行結果:klvchen

attributeerror: 'foo' object has no attribute 'name'

通過字串的形式操作物件中的成員class foo:

stat = '666'

def __init__(self, name, age):

self.name = name

self.age = age

res = getattr(foo, 'stat')

print(res)

執行結果:666

建立兩個檔案,s1.py 和 s2.py

s2.py 內容如下:name = 'klvchen'

def func():

return 'func'

s1.py 內容如下:import s2

res1 = getattr(s2, 'name')

print(res1)

res2 = getattr(s2, 'func')

result = res2()

print(result)

執行 s1.py 檔案:klvchen

func

建立兩個檔案,s1.py 和 s2.py

s2.py 內容如下:name = 'klvchen'

def func():

return 'cwe'

class foo:

def __init__(self):

self.name = 666

s1.py 內容如下:import s2

res1 = getattr(s2, 'name')

print(res1)

res2 = getattr(s2, 'func')

result = res2()

print(result)

cls = getattr(s2, 'foo')

print(cls)

obj = cls()

print(obj)

print(obj.name)

執行 s1.py 檔案,執行結果:klvchen

cwe建立兩個檔案,s1.py 和 s2.py

s2.py 內容如下:def f1():

return '首頁'

def f2():

return '新聞'

def f3():

return '精華'

s1.py 內容如下:import s2

inp = input('請輸入要檢視的url: ')

if hasattr(s2, inp):

func = getattr(s2, inp)

result = func()

print(result)

else:

print('404')

執行 s1.py 檔案,執行結果:請輸入要檢視的url: f1

首頁

python 一文讀懂 GIL

1.python 的直譯器分為 cpython 預設直譯器 和 jpython,由於歷史原因,在 cpython 上難以移除 gil 2.每個執行緒執行是都需要先獲取 gil,保證同一時刻只有乙個執行緒可以執行 所以 python 的多執行緒並不是真正的多執行緒,不能利用多核的 cpu 資源,但多程...

一文讀懂Nginx

問 nginx的負載均衡演算法有什麼?預設是什麼演算法?答 1 輪詢 按請求的時間輪詢查空閒的後端伺服器 2 指定輪詢機率 機率的原因是後端伺服器的效能不均勻,好的多分點,差的少分點 3 固定ip繫結固定伺服器 預設是加權輪詢,就是優先訪問權重高的伺服器 問 nginx是單執行緒的嗎?答 是單執行緒...

一文讀懂SpringMVC

主要講的是dispatcherservlet這個類 ioc其實是乙個map,工程啟動後掃瞄路徑,根據類的全限定名建立bean 問 怎麼根據路徑找到方法?map還存key為 aaa value為該controller例項 問 autowired原理?自定義註解,在載入的時候,掃瞄controller層...