今日主要內容
1.物件導向高階特性---反射
2.內建函式和內建方法補充
1.什麼是反射:
通過內建函式getattr(),hasattr(),setattr(),delattr()實現,在類外通過對字串的操作,能夠將類內同名的靜態變數,方法,如物件屬性是無法取到值的.
也可以理解為:
***正常情況下如果可以拿到這個變數 那麼如有有這個變數的字串形式 就是用反射可以獲取到這個值
使用字串資料型別的變數名 訪問乙個命名空間中的名字
找乙個屬性 ,直接就可以找到這個屬性的值
找乙個方法 ,找到的是這個方法的記憶體位址
例:
classa: role = '
person
'def
func(self):
a = 'b'
print("
*" *self)
print(getattr(a,'
role
')) #
靜態變數的反射
print(getattr(a,'
func
')) #
類中方法取到的是記憶體位址
getattr(a,'
func
')(3) #
類中方法的反射
**類使用類命名空間中的名字
例:下面例中使用物件名進行獲取
classa: role = '
person
'def
__init__
(self):
self.money = 500
deffunc(self):
print('
*'*10)
a = a() #
例項化a 為物件名稱
(a.func)
getattr(a,
'func
')()
print(getattr(a,'
money
'))
***物件使用物件能用的方法和屬性
內建函式的介紹:
hasattr() 判斷乙個命名空間中有沒有這個名字
getattr() 從命名空間中獲取這個名字對應的值
模組含義:模組就是類所在python的檔名
例:
deflogin():
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(模組名,'名字')
importos getattr(os,
'rename
')('
user
','user_info
')
getattr一定要和hasattr配合使用
setattr # 修改和新建
delattr # 刪除乙個屬性
setattr
例:
classa:
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
例:
classa:
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:passclass a(b):pass
a =a()
(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...