python中的__init__

作者: Rainbow想喝奶茶 | 来源:发表于2021-09-12 23:38 被阅读0次

    在建立类的过程中,常常会看到有些例子首先会建立__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根地址。
    1. 利用__init__,初始化client这个类建立的实例的属性。该方法传入的第一个参数self,就代表实例对象本身。
    2. 利用self.api_root_url=api_root_url来初始化实例的根url。这个过程就是把调用类时传入的url赋值给实例本身,这样在整个类中应用各个方法,实例的该属性始终保存。
      如果不加self.api_root_url相当于是在__init__函数内部的一个局部变量,不属于实例本身。此方法结束则此局部变量结束,不会在其它方法中起到作用。
    3. 在初始化阶段创建了self.session,保存会话功能。
    • 第二部分:拼接请求url,发起会话请求。
    1. 首先是将在__init__中传入的api_root_url与后续url进行拼接,组成真正发起请求的url。
    2. 根据传入的对应方法,发起对应的请求。
    • 第三部分:调用第二部分的request。
    1. 传递参数给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"},最后输出返回值。

    返回值截图

    自我记录,有错误欢迎指正~

    相关文章

      网友评论

        本文标题:python中的__init__

        本文链接:https://www.haomeiwen.com/subject/xedxgltx.html