面向?qū)ο?--類的特殊成員、反射

什么時候適用面向?qū)ο螅?/h3>
  • 如果多個函數(shù)須傳入多個共同的參數(shù)時
  • 根據(jù)一個模板創(chuàng)建某些東西
  • (ssh)

類的特殊成員

1. __doc__ #輸出:類的描述信息

2. __module__ 和 __class__
  __module__ 表示當(dāng)前操作的對象在那個模塊
  __class__ 表示當(dāng)前操作的對象的類是什么

3. __init__
  構(gòu)造方法,通過類創(chuàng)建對象時,自動觸發(fā)執(zhí)行。

4. __del__
  析構(gòu)方法,當(dāng)對象在內(nèi)存中被釋放時,自動觸發(fā)執(zhí)行。

5. __call__
  對象后面加括號,觸發(fā)執(zhí)行。即: 對象() 或 類()()

class Foo:
    def __init__(self):
        pass

    def __call__(self, *args, **kwargs):
        print('__call__')


obj = Foo()  # 執(zhí)行 __init__
obj()  # 執(zhí)行 __call__

6. __dict__ 類或?qū)ο笾械乃谐蓡T

7. __str__
  如果一個類中定義了__str__方法,那么在打印 對象 時,默認(rèn)輸出該方法的返回值。

8. __getitem__ __setitem__ __delitem__
  類似字典一樣索引的操作,以上分別表示獲取,設(shè)置,刪除。(當(dāng)在類外面做了這些操作后觸發(fā)這些函數(shù),甚至可刪除不存在的數(shù)據(jù))

class Foo(object):
    def __getitem__(self, key):
        print('__getitem__',key)
    def __setitem__(self, key, value):
        print('__setitem__',key,value)
    def __delitem__(self, key):
        print('__delitem__',key)

obj = Foo()

result = obj["k1"]          # 自動觸發(fā)執(zhí)行 __getitem__
obj['k2'] = 'wupeiqi'      # 自動觸發(fā)執(zhí)行 __setitem__
del obj['k1']              # 自動觸發(fā)執(zhí)行 __delitem__

__getitem__ k1
__setitem__ k2 wupeiqi
__delitem__ k1

9. __new__ 用來將類實(shí)例化的

def __new__(cls,*args,**kwargs):   #重構(gòu)__new__方法:在實(shí)例化之前做些事情
    print("Foo --new--")
    return object.__new__(cls)     #繼承父類的__new__方法(此時cls是一個對象)

反射(用戶交互)

hasattr(obj,name_str) 判斷一個對象obj中是否有對應(yīng)的name_str字符串方法,返回布爾值
getattr(obj,name_str) 根據(jù)字符串去獲取obj對象里的對應(yīng)方法的內(nèi)存地址
setattr(d,name_str,[new]) 給對象的屬性\方法重新定義,若不存在,先創(chuàng)建再賦值。

class Dog(object):
    def __init__(self,name):
        self.name = name
    def eat(self,food):
        print("%s is eating %s" %(self.name,food))

def bulk(name):
    print("%s is yelling ..." %name)

d = Dog("xiaohei")
choice = input(">>: ").strip()
if hasattr(d,choice):
    func = getattr(d,choice)
    func("xiaoqiang")
else:
    # setattr(d,choice,"black")     #--1--  設(shè)置變量
    # v = getattr(d,choice)
    # print(v)
    setattr(d,choice,bulk)       #--2--  設(shè)置方法
    bulk(d.name)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容