Python 關(guān)于反射和類的特殊成員方法
反射
反射即想到4個(gè)內(nèi)置函數(shù)分別為:getattr、hasattr、setattr、delattr 獲取成員、檢查成員、設(shè)置成員、刪除成員
class Dog(object):
def __init__(self,name):
self.name = name
def eat(self):
print("%s is eating..."%self.name)
def run():
print("runing ....")
d = Dog("lucy")
choise=input("請(qǐng)輸入要調(diào)用的方法:")
if hasattr(d,choise):#判斷一個(gè)對(duì)象是否有對(duì)應(yīng)的字符串方法
func=getattr(d,choise)#根據(jù)字符串去獲取對(duì)象里相應(yīng)的方法或?qū)傩缘膬?nèi)存地址對(duì)象
func()
else:
setattr(d,choise,run)#setattr(obj,y,fun)相當(dāng)于obj.y=fun,fun可以是屬性或者方法
v=getattr(d,choise)
print(v)
dir([obj]):
調(diào)用這個(gè)方法將返回包含obj大多數(shù)屬性名的列表(會(huì)有一些特殊的屬性不包含在內(nèi))。obj的默認(rèn)值是當(dāng)前的模塊對(duì)象。
hasattr(obj, attr):
這個(gè)方法用于檢查obj是否有一個(gè)名為attr的值的屬性,返回一個(gè)布爾值。
getattr(obj, attr):
調(diào)用這個(gè)方法將返回obj中名為attr值的屬性的值,例如如果attr為'bar',則返回obj.bar。
setattr(obj, attr, val):
調(diào)用這個(gè)方法將給obj的名為attr的值的屬性賦值為val。例如如果attr為'bar',則相當(dāng)于obj.bar = val。
__doc__ 查看尖的描述信息
__module__表示當(dāng)前操作的對(duì)象所在的模塊
__class__表示當(dāng)前操作的對(duì)象所屬的類
__init__構(gòu)造方法 通過(guò)類創(chuàng)建對(duì)象自動(dòng)執(zhí)行
__del__析構(gòu)方法,當(dāng)前對(duì)象在內(nèi)存中被釋放自動(dòng)斬妖執(zhí)行
__call__對(duì)象后面加括號(hào)觸發(fā)執(zhí)行
__dict__查看類或?qū)ο笾械某蓡T
__str__如果一個(gè)類中定義了此方法,那么打印此類對(duì)象時(shí),輸出此方法的返回值
__getitem__當(dāng)類中定義了一個(gè)字典的屬性成員,可以獲取
__setitem__設(shè)置修改類中字典的數(shù)據(jù)
__delitem__刪除 類中字典的數(shù)據(jù)
__metalass__其用來(lái)表示該類由 誰(shuí) 來(lái)實(shí)例化創(chuàng)建
__new__觸發(fā) __init__創(chuàng)建實(shí)例
from lib.ss import a
#示例類 dog
class doges(object):
"""類的描述信息"""
def __init__(self,name,food):
self.name=name
self.food=food
self.data={}#定義一個(gè)類的字典
def __call__(self, *args, **kwargs):#對(duì)象后面加括號(hào)解執(zhí)行
print(*args)
def __str__(self):#默認(rèn)輸出返回值
return self.name
def __getitem__(self):#可以獲取類的的字典
return self.data
def __setitem__(self, key, value):#可以設(shè)置類的的字典
self.data[key]=value
def __delitem__(self, key):#可以刪除類的字典的內(nèi)容
del self.data[key]
dog=doges('xxx','iii')
print(dog.__doc__)
b=a()
print(b.__module__)#操作的對(duì)象的那個(gè)模塊
print(dog.__class__)#當(dāng)前操作的對(duì)象的類是什么
dog('111')#
print(doges.__dict__)#查看類或?qū)ο蟮某蓡T 類只打印類的成員不打印對(duì)象的成員
print(dog.__dict__)#查看類或?qū)ο蟮某蓡T 對(duì)象只打印對(duì)象的成員不打印類的成員
print(dog)#打印 __str__的返回值
print(dog.__str__())#打印返回值
dog['1']=1000#觸發(fā).__setitem__()
dog['2']=1000#觸發(fā).__setitem__()
print(dog.__getitem__())
print(dog.__delitem__('1'))#刪除類中字典
print(dog.__getitem__())
#設(shè)置類的特殊方法
def func(self):
print('hello word%s'%self.name)
print()
def __init__(self,name,age):
self.name=name
self.age=age
##type參數(shù) 1:類名 2.類的基類 3.類的成員,字典格式
CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
cat=CAT('喵喵',3)
cat.func()
print(cat.name,cat.age)
相關(guān)文章
Python中eval帶來(lái)的潛在風(fēng)險(xiǎn)代碼分析
這篇文章主要介紹了Python中eval帶來(lái)的潛在風(fēng)險(xiǎn)代碼分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Python基于unittest實(shí)現(xiàn)測(cè)試用例執(zhí)行
這篇文章主要介紹了Python基于unittest實(shí)現(xiàn)測(cè)試用例執(zhí)行,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
使用Python微信庫(kù)itchat獲得好友和群組已撤回的消息
這篇文章主要介紹了使用Python微信庫(kù)itchat獲得好友和群組已撤回的消息,需要的朋友可以參考下2018-06-06
python數(shù)據(jù)類型的詳細(xì)分析(附示例代碼)
這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)類型分析的相關(guān)資料,python里可以通過(guò)type()函數(shù)來(lái)查看數(shù)據(jù)類型,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
python中Requests請(qǐng)求的安裝與常見用法
Requests是一常用的http請(qǐng)求庫(kù),它使用python語(yǔ)言編寫,可以方便地發(fā)送http請(qǐng)求,以及方便地處理響應(yīng)結(jié)果,下面這篇文章主要給大家介紹了關(guān)于python中Requests請(qǐng)求的安裝與常見用法的相關(guān)資料,需要的朋友可以參考下2022-07-07
使用seaborn繪制強(qiáng)化學(xué)習(xí)中的圖片問(wèn)題
這篇文章主要介紹了使用seaborn繪制強(qiáng)化學(xué)習(xí)中的圖片問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
Python 數(shù)據(jù)結(jié)構(gòu)之十大經(jīng)典排序算法一文通關(guān)
排序算法可以分為內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的排序記錄,在排序過(guò)程中需要訪問(wèn)外存2021-10-10

