天天看點

類、對象及self的使用

!!!self備忘錄

有如下一段代碼

class Myself:
    name = '小白'
    age = 20
    def func1(self):
        self.hobby = 'coding'

t1 = Myself()
print(t1.__dict__)
           

執行結果:

可以看到此時對象t1中沒有任何屬性,此時我們調用一下函數func1

class Myself:
    name = '小白'
    age = 20
    def func1(self):
        self.hobby = 'coding'

t1 = Myself()
t1.func1()
print(t1.__dict__)
           

執行結果:

這時對象t1中就有了hobby這個屬性,這裡的self就可以簡單了解為,哪個對象調用func1,這裡的self就是哪個對象

看如下代碼段:

class Myself:
    name = '小白'
    age = 20
    def func1(self):
        self.hobby = 'coding'
    def func2(self):
        print(self.hobby)

t1 = Myself()
t1.func2()

           

執行結果:

這裡報了一個AttributeError錯誤,從剛才的self了解到誰調用,self就是誰的屬性,

但從代碼中我們看到,我們并未調用func1,隻調用了func2,func2函數在目前類中并未查找到hobby屬性,在類中也未找到hobby屬性,是以報錯,未找到hobby屬性,這裡我們先調用func1賦給func1一個hobby屬性,然後用fun2輸出這個屬性,如下:

class Myself:
    name = '小白'
    age = 20
    def func1(self):
        self.hobby = 'coding'
    def func2(self):
        print(self.hobby)

t1 = Myself()
t2 = Myself()
t1.func1()
t1.func2()
print(t1.__dict__)
print(t2.__dict__)
           

執行結果如下:

coding
{'hobby': 'coding'}
{}
           

這裡就輸出了對象中的屬性hobby對應的coding,此時建立的t2中為空,t1中有hobby這個屬性,再次證明了誰調用,self對應的就是哪個對象的屬性