今天工作中写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白学了…),所以后续还需要再学习面向对象这一方面