python中的__init__
2021-09-12 本文已影响0人
Rainbow想喝奶茶
在建立类的过程中,常常会看到有些例子首先会建立__init__
方法,做一些参数传入的工作,下面就对这个方法进行一些简单的说明。
__init__
作用
实例对象属性初始化。它完成了给类建立的实例设置初始化参数的作用,并且在这个类下的所有方法均可以应用上述参数,而不需要每一个方法再去进行单独的参数设置。(一段不专业但我自己是这么理解的说明)
举例说明
最近看的书,第一步就是从封装请求开始,就以这个作为样例开始学习吧。
import requests
class client():
def __init__(self,api_root_url):
self.api_root_url=api_root_url
self.session=requests.session()
def request(self,url,method,data=None,json=None,**kwargs):
url=self.api_root_url+url
if method=="get":
return self.session.get(url,**kwargs)
if method=="post":
return self.session.post(url,data,json,**kwargs)
def get(self,url,**kwargs):
return self.request(url,"get",**kwargs)
def post(self,url,data=None,json=None,**kwargs):
return self.request(url,"post",data,json,**kwargs)
在上面的例子中,可以分为三个部分来看。
- 第一部分:初始化url根地址。
- 利用
__init__
,初始化client
这个类建立的实例的属性。该方法传入的第一个参数self
,就代表实例对象本身。 - 利用
self.api_root_url=api_root_url
来初始化实例的根url。这个过程就是把调用类时传入的url赋值给实例本身,这样在整个类中应用各个方法,实例的该属性始终保存。
如果不加self.
,api_root_url
相当于是在__init__
函数内部的一个局部变量,不属于实例本身。此方法结束则此局部变量结束,不会在其它方法中起到作用。 - 在初始化阶段创建了
self.session
,保存会话功能。
- 第二部分:拼接请求url,发起会话请求。
- 首先是将在
__init__
中传入的api_root_url
与后续url进行拼接,组成真正发起请求的url。 - 根据传入的对应方法,发起对应的请求。
- 第三部分:调用第二部分的request。
- 传递参数给
request
,执行对应的请求。
这里为什么不是直接发起requests
请求,因为想解决的是url拼接的问题,request
方法直接拼接完成,后续的调用方法可以直接输入后续的地址即可。
整个封装的类,其实是实现了避免重复输入url根地址的冗余过程。
最后验证一下调用结果:
if __name__=="__main__":
client=client("http://httpbin.org")
demand=client.post("/post",json={"a":"b"})
print(demand.text)
建立client
对象,传入根url;
调用post
方法(request
函数中的method=post
),并向"http://httpbin.org/post"传入json={"a":"b"},最后输出返回值。
自我记录,有错误欢迎指正~