python特殊函式(id, dir, type, isinstance, issubclass, is)
阿新 • • 發佈:2019-02-03
內建函式
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