一般在写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)