1. 程式人生 > >python特殊函式(id, dir, type, isinstance, issubclass, is)

python特殊函式(id, dir, type, isinstance, issubclass, is)

內建函式

id()如果我們能獲取物件(變數、方法或型別例項)的 "記憶體地址" 對於我們瞭解引用機制還是非常不錯的。
id() 返回一個物件的 "唯一序號",轉換成 16 進位制就是所謂的記憶體地址了,為了圖方便後面直接使用 id(),不再轉換成 16 進位制。

>>>>>> def Foo():  
pass  >>>>>> Foo  
<function Foo at 0x00DC6EB0>  
>>>>>> hex(id(Foo))  
'0xdc6eb0'  
>>>>>>   

dir()方法 dir() 能幫我們瞭解物件包含哪些成員。

>>>>>> dir(Foo)  
['__call__', '__class__', '__delattr__', '__dict__', '__doc__', '__get__', '__getattribute__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']  
>>>>>>   

type()type() 讓我們知道變數的實際型別。

>>>>>> type(Foo)  
<type 'function'>  
>>>>>>   

isinstance()isinstance() 可以確認某個變數是否某種型別。

>>>>>> s = "Xwy2.com"  
>>>>>> isinstance(s, str)  
True  
>>>>>>   

issubclass()該函式可以判斷繼承關係。

>>>>>> issubclass(int,object)  
True  
>>>>>>   

is多數情況下,我們可以直接使用 "==" 來判斷兩個物件是否相等。但 Python 同樣支援運算子過載,因此使用 is 來代替應該更安全一點(C# 中經典的 Equals 問題)。

>>>>>> class MyClass:  
def __ini__(Self):  
    self.x = 123  
def __eq__(self, o):  
return self.x == o.x  
>>>>>> a = MyClass()  
>>>>>> b = MyClass()  
>>>>>> print hex(id(a))  
0xdcea80  
>>>>>> print hex(id(b))  
0xdc4b98  
>>>>>> print a == b  
true  
>>>>>> print a is b  
false