!!!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對應的就是哪個對象的屬性