python的class(类)中的self是什么意思

1. self

        一般在写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,那你是得不到这些可操做对象的。工具

 

 

2. 命名空间

        命名空间是啥意思?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"

 

4. 命名空间寻址顺序(LEGB原则)

                    1. 本地(L)ci

                    2. 函数、类(E)

                    3. 全局(G)

                    4. 内置(B)

相关文章
相关标签/搜索