本文和大家分享的主要是python
中有關
反射和類的特殊成員方法,一起來看看吧,希望對大家
學習python有所幫助。
反射
反射即想到4
個內置函數分別為
:getattr
、
hasattr
、
setattr
、
delattr
獲取成員、檢查成員、設置成員、刪除成員
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("
請輸入要調用的方法:
")
if hasattr(d,choise):#
判斷一個對象是否有對應的字符串方法
func=getattr(d,choise)#
根據字符串去獲取對象里相應的方法或屬性的內存地址對象
func()
else:
setattr(d,choise,run)#setattr
(
obj
,
y
,
fun
)相當于
obj.y=fun
,
fun
可以是屬性或者方法
v=getattr(d,choise)
print(v)
dir([obj]):
調用這個方法將返回包含obj
大多數屬性名的列表(會有一些特殊的屬性不包含在內)。
obj
的默認值是當前的模塊對象。
hasattr(obj, attr):
這個方法用于檢查obj
是否有一個名為
attr
的值的屬性,返回一個布爾值。
getattr(obj, attr):
調用這個方法將返回obj
中名為
attr
值的屬性的值,例如如果
attr
為
'bar'
,則返回
obj.bar
。
setattr(obj, attr, val):
調用這個方法將給obj
的名為
attr
的值的屬性賦值為
val
。例如如果
attr
為
'bar'
,則相當于
obj.bar = val
。
__doc__
查看尖的描述信息
__module__
表示當前操作的對象所在的模塊
__class__
表示當前操作的對象所屬的類
__init__
構造方法 通過類創(chuàng)建對象自動執(zhí)行
__del__
析構方法
,
當前對象在內存中被釋放自動斬妖執(zhí)行
__call__
對象后面加括號觸發(fā)執(zhí)行
__dict__
查看類或對象中的成員
__str__
如果一個類中定義了此方法
,
那么打印此類對象時
,
輸出此方法的返回值
__getitem__
當類中定義了一個字典的屬性成員
,
可以獲取
__setitem__
設置修改類中字典的數據
__delitem__
刪除 類中字典的數據
__metalass__
其用來表示該類由 誰 來實例化創(chuàng)建
__new__
觸發(fā)
__init__
創(chuàng)建實例
from lib.ss
import a#
示例類
dog
class
doges(object):
"""
類的描述信息
"""
def
__init__(self,name,food):
self.name=name
self.food=food
self.data={}#
定義一個類的字典
def
__call__(self, *args, **kwargs):#
對象后面加括號解執(zhí)行
print(*args)
def
__str__(self):#
默認輸出返回值
return self.name
def
__getitem__(self):#
可以獲取類的的字典
return self.data
def
__setitem__(self, key, value):#
可以設置類的的字典
self.data[key]=value
def
__delitem__(self, key):#
可以刪除類的字典的內容
del self.data[key]
dog=doges('xxx','iii')
print(dog.__doc__)
b=a()
print(b.__module__)#
操作的對象的那個模塊
print(dog.__class__)#
當前操作的對象的類是什么
dog('111')#
print(doges.__dict__)#
查看類或對象的成員
類只打印類的成員不打印對象的成員
print(dog.__dict__)#
查看類或對象的成員 對象只打印對象的成員不打印類的成員
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__())
#
設置類的特殊方法
def
func(self):
print('hello word%s'%self.name)
print()
def
__init__(self,name,age):
self.name=name
self.age=age##type
參數
1:
類名
2.
類的基類
3.
類的成員
,
字典格式
CAT=type('CAT',(object,),{'func':func,'__init__':__init__})
cat=CAT('
喵喵
',3)
cat.func()
print(cat.name,cat.age)
來源:
博客園