Python 的對象天生擁有一些神奇的方法,它們總被雙下劃線所包圍,它們是面向對象的 Python 的一切。它們是可以給你的類增加魔力的特殊方法,如果你的對象實現(重載)了某一個魔法方法,那麼這個方法就會在特殊的情況下自動被 Python 所調用。
定義對象被 dir() 函數調用時的行為。
self 表示對象本身。
一個可迭代對象。
class MyTest(object):
def __init__(self):
self.name = '阿珍'
self.age = 18
def __dir__(self) -> 'Iterable[str]':
dic = self.__dict__.copy()
if 'name' in dic:
dic.pop('name')
return dic
sample = MyTest()
print(dir(sample))
class CLanguage:
def __init__(self, ):
self.name = "C語言中文網"
self.add = "http://c.biancheng.net"
def say(self):
pass
clangs = CLanguage()
print(dir(clangs))
通過 dir() 函數,不僅僅輸出本類中新添加的屬性名和方法(最後 3 個),還會輸出從父類(這裡為 object 類)繼承得到的屬性名和方法名。
dir() 函數的內部實現,其實是在調用參數對象 __dir__() 方法的基礎上,對該方法返回的屬性名和方法名做了排序。
所以,除了使用 dir() 函數,可以自行調用該對象具有的 __dir__() 方法:
class CLanguage:
def __init__(self, ):
self.name = "C語言中文網"
self.add = "http://c.biancheng.net"
def say(self):
pass
clangs = CLanguage()
print(clangs.__dir__())
使用 __dir__() 方法和 dir() 函數輸出的數據是相同,僅僅順序不同。