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層...