今天工作中寫python代碼,在def函數定義的時候總要寫一個self參數,不明白何意思…百度了一下這個self代表的是類的實例,不是類,所以學習一下相關知識。
下面這個Sms類中的函數是用post請求獲取數據,獲取的數據是json格式,取json中的body
在send函數中我們就定義了變量self,但其實在函數內部並沒有用到它
import requests import json class Sms(): def send(self, url, body): request = requests.post(url, json=body) return request.json()
在調用的時候也需要寫這個self:
def signature(self): request = self.interf.send(self.yam.read('url')) # 這里的read是另一個函數
那么明確self的用處:
1)self只有在類的方法中才會有,獨立的函數或方法是不必帶有self的。
2)self在定義類的方法時是必須有的,雖然在調用時不必傳入相應的參數。
3)self名稱不是必須的,在python中self不是關鍵詞,定義成a或b或其他名字都可以,只是約定俗成我們定義成了self。
4)self指的是類實例對象本身,不是類本身。
例1:
class Person: def __init__(self, name): self.name=name def sayhello(self): print('My name is:', self.name) p = Person('Bill') print(p)
結果:
<__main__.Person object at 0x000002744FEA8208>
上述例子中,self指向【Person】的實例【p】
此外:
5)self在定義的時候需要定義,但是在調用的時候會自動傳入
6)self總是指調用時的類的實例
例2:
class Parent: def pprt(self): print(self) class Child(Parent): def cprt(self): print(self) c = Child() c.cprt() c.pprt() p = Parent() p.pprt()
結果:
<__main__.Child object at 0x000001FC9E7B8BE0> <__main__.Child object at 0x000001FC9E7B8BE0> <__main__.Parent object at 0x000001FC9E7B8C50>
上述例子中,在繼承時,傳入的是哪個實例,self就是那個傳入的實例,而不是指定義了self類的實例.
暫時了解了這么多,然后關於類和類的實例,還不是很懂(之前學的python白學了…),所以后續還需要再學習面向對象這一方面
