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)

相關文章
相關標籤/搜索