13.12 類、例項和其他物件的內建函式
13.12.1 issubclass()
issubclass()布林函式判斷乙個類是否另乙個類的子類或子孫類。
>>> class sortedkeydict(dict): ... def keys(self): ... return sorted(super(sortedkeydict, self).keys()) ... >>> issubclass(sortedkeydict, dict) true >>>
13.12.2 isinstance()
isinstance()布林函式在判定乙個物件是否另乙個給定類的例項時非常有用。
>>> class sortedkeydict(dict): ... def keys(self): ... return sorted(super(sortedkeydict, self).keys()) ... >>> dic = sortedkeydict() >>> isinstance(dic, sortedkeydict) true >>> 13.12.3 hasattr()、getattr()、setattr()、delattr()
hasattr()函式是布林型的,它的目的就是為了決定乙個物件是否有乙個特定的屬性。getattr()和setattr()函式相應地取得和賦值給物件的屬性。
delattr()函式會從乙個物件中刪除屬性。
>>> class myclass(object): ... def __init__(self): ... self.foo = 100 ... >>> hasattr(myclass(), 'foo') true >>> getattr(myclass(), 'foo') 100 >>> c = myclass() >>> setattr(c, 'foo', 200) >>> c.foo 200 >>> delattr(c, 'foo') >>> c.foo > >>>
13.12.4 dir()
>>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'pywin'] >>> class myclass(object): ... def __init__(self): ... self.value1 = 100 ... value2 = 200 ... >>> dir(myclass) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'value2'] >>> dir(myclass()) ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'value1', 'value2'] >>> dir(myclass.__module__) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] >>> dir()作用在例項上時,顯示例項變數,還有在例項所在類及所有它的基類中定義的方法和類屬性。
dir()作用在類上時,則顯示類以及它所有基類的__dict__中的內容。但它不會顯式定義在元類中的類屬性。
dir()作用在模組上時,則顯示模組的__dict__的內容。
dir()不帶引數時,則顯示呼叫者的區域性變數
13.12.5 super()
super()函式的目的就是幫助程式設計師找出相應的父類,然後方便呼叫相關的屬性。
13.12.6 vars()
vars()返回乙個字典,它包含了物件儲存於其__dict__中的屬性(鍵)和值。如果沒有提供物件作為vars()的乙個引數,它將顯示乙個包含本地名字空間的屬性(鍵)及其值的字典,也就是locals()。
>>> class myclass(object): ... def __init__(self): ... self.value1 = 100 ... value2 = 200 ... >>> vars() >>> vars(myclass())
第13章 物件導向程式設計 13
13.13.3 迭代器 randseq和anyiter 1.randseq from random import choice class randseq object def init self,seq self.data seq def iter self return self def nex...
第13章 物件導向程式設計 3
13.4 類屬性 屬性就是屬於另乙個物件的資料或者函式元素,可以通過我們熟悉的句點屬性標識來訪問。13.4.1 類的資料屬性 資料屬性僅僅是所定義的類的變數。靜態變數,或者是靜態資料表示這些資料是與它們所屬的類物件繫結的,不依賴於任何類例項。靜態成員通常僅用來跟蹤與類相關的值。大多數情況下,你會考慮...
第13章 物件導向程式設計 17
13.16.5 元類和 metaclass 1.元類 metaclasses 是什麼 元類讓你來定義某些類是如何被建立的,從根本上說,賦予你如何建立類的控制權。從根本上說,你可以把元類想成是乙個類中類,或是乙個類,它的例項是其他的類。當你建立乙個新類時,你就是在使用預設的元類,它是乙個型別物件 對傳...