Python 類的特殊成員方法


 

 
類的特殊成員方法

 

 

 

1.__doc__ :打印類的描述信息

class Foo:
    """ 描述類信息,這是用於看片的神奇 """
 
    def func(self):
        pass
 
print Foo.__doc__
#輸出:類的描述信息

 

2.__module__:表示當前操作的對象在那個模塊

class C:

    def __init__(self):
        self.name = 'wupeiqi'

 

3.__class__表示當前操作的對象的類是什么

from lib.aa import C

obj = C()
print obj.__module__  # 輸出 lib.aa,即:輸出模塊
print obj.__class__      # 輸出 lib.aa.C,即:輸出類

 

4. __init__ :構造方法,通過類創建對象時,自動觸發執行

class Role(object):    
#初始化函數,在生成一個角色時要    初始化的一些屬性就填寫在這里    
    def __init__(self,name,role,weapon,life_value=100,money=15000):
        
#__init__中的第一個參數self,和這里的self都 是什么意思? 看下面解釋
self.name = name
        self.role = role

 

5.__del__:析構方法,當對象在內存中被釋放時,自動觸發執行

class Role(object):
    def __init__(self,name,role,weapon:
        self.name = name
        self.role = role
        self.weapon = weapon

    def __del__(self):             #析構函數
        print("del.....run...")
r1 = Role('Alex','police','AK47')    #生成一個角色

 

6.__call__:對象后面加括號,觸發執行

#注:構造方法的執行是由創建對象觸發的,即:對象 = 類名() ;而對於 __call__ 方法的執行是由對象后加括號觸發的,即:對象() 或者 類()()
class Foo:
 
    def __init__(self):
        pass
     
    def __call__(self, *args, **kwargs):
 
        print '__call__'
 
obj = Foo() # 執行 __init__
obj()       # 執行 __call__
class _Getch:
    def __init__(self):
        self.impl = _GetchUnix()
        
    def __call__(self): return self.impl()
巧妙用法1

 

7.__dict__:查看類或對象中的所有成員

print(類.__dict__) # 打印類里所有屬性,不包括實例屬性
print(實例.__dict__) #打印實例所有屬性,不包括類屬性

 

8.__str__:如果一個類中定義了__str__方法,那么在打印 對象 時,默認輸出該方法的返回值

class Foo:
 
    def __str__(self):
        return 'alex li'
 
obj = Foo()
print obj
# 輸出:alex li

 

9.__getitem____setitem____delitem__:

注:用於索引操作,如字典。以上分別表示獲取、設置、刪除數據

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']      # 自動觸發執行 __getitem__
obj['k2'] = 'alex'   # 自動觸發執行 __setitem__
del obj['k1']   

 

10.__new__\__metaclass__ *(自定義類)

__new__:是用來創建實例的,對類實例化之前進行定制,可以用到。

__metaclass__:定義一個類如何被創建

類的生成 調用 順序依次是 __new__ --> __init__ --> __call__

#創建類特殊方式
def func(self):
    print(self.name,self.age)

def __init__(self,name,age):
    self.name = name
    self.age = age

#通過Type實例化產生的Foo類,Foo是Type的對象。
#(object,)加入“,”是為了讓括號知道他是個元組。
#type第一個參數:類名
#type第二個參數:當前類的基類
#type第三個參數:類的成員
Foo = type('Foo',(object,),{'talk':func,
                            '__init__':__init__})

f= Foo("Chrn",22)
f.talk()
print(type(Foo))
#Type 為 類的類,所有類都是Type創建的

 metaclass 詳解文章:http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python 得票最高那個答案寫的非常好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM