一般在寫class的時候,定義多個方法,只須要self.一下這個方法名就能夠調用和執行這個方法,這其實是一個python的內部尋址機制,叫作命名空間檢索。python
編寫class的子方法時,必需要用self,才能持續傳遞命名空間,也就是說只有用了self傳遞,才能調用子方法。vim
# -.- coding:utf-8 -.- # __author__ = 'zhengtong' class Person: def __init__(self, name): self.name = name def meet_someone(self): print "咦,那有我的,手裏有根菸,過去找他拿火" def say_hello(self): print "兄弟你好,我叫{0}".format(self.name) def ask_for_fire(self): print "來個火,我抽跟煙,忘記帶火了,謝謝" def show(self): print '查看self是個什麼{0}\n\n\n'.format(dir(self)) self.meet_someone() self.say_hello() self.ask_for_fire() s = Person("李四") s.show()
輸出結果函數
查看self是個什麼['__doc__', '__init__', '__module__', 'ask_for_fire', 'meet_someone', 'name', 'say_hello', 'show'] 咦,那有我的,手裏有根菸,過去找他拿火 兄弟你好,我叫李四 來個火,我抽跟煙,忘記帶火了,謝謝
經過利用自省工具dir() , 打印出來self,能夠看到完整的類命名空間裏面都有些啥,也就是說其實寫class的時候不傳self,那你是得不到這些可操做對象的。工具
命名空間是啥意思?spa
答: 命名空間是一個以字典形式保存變量名的一個特殊變量;這個特殊變量被python內部機制調用,經過這個特殊變量python就能夠找到你定義的變量了,code
好比說我建立一個x.py文件,而後定義一個hello變量。對於python而言,x.py自身擁有一個內置命名空間和一個全局命名空間,全局該命名空間中包含了一個hello的變量.orm
# vim x.py # -.- coding:utf-8-.- hello = 'a'
在好比說在x.py文件中,定義一個cigarette函數。這個時候對於python而言, 就擁有了三個命名空間,一個是內置命名空間,一個是全局命名空間,一個是專屬於cigarette函數的命名空間.對象
# vim x.py # -.- coding:utf-8-.- hello = 'a' def cigarette(): s = "20" return "一包煙有{0}支香菸".format(s)
在好比說在x.py文件中,定義一個Animal類。這個時候對於python而言,就擁有了四個命名空間,一個是內置命名空間,一個是全局命名空間,一個是專屬於cigarette函數的命名空間,一個是Animal類的命名空間.utf-8
# vim x.py # -.- coding:utf-8-.- hello = 'a' def cigarette(): s = "20" return "一包煙有{0}支香菸".format(s) class Animal: s = "dog"
1. 本地(L)ci
2. 函數、類(E)
3. 全局(G)
4. 內置(B)