前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >关于类、方法、对象(实例):实例方法和静态方法

关于类、方法、对象(实例):实例方法和静态方法

作者头像
冰霜
发布2022-03-15 15:40:12
发布2022-03-15 15:40:12
80100
代码可运行
举报
运行总次数:0
代码可运行

类里面的方法有3种:

  • 类的实例方法(平时常用的带有self的方法)
  • 静态方法(@staticmethod )
  • 类方法(@classmethod)

这里主要看一下类的实例方法和静态方法的区别:

(1)实例方法只能被实例对象调用,第一个参数必须要默认传实例对象,一般习惯用self;

(2)静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用

先看如下代码

其实上述代码中的get_request()和post_request()方法可以写为静态方法

用pycharm的应该会见到提示,建议你这个方法改为静态方法,其实如果都按照实例方法来写的话,不改也不影响调用

因为这里并不需要通过实例来调用这两个方法,它们只是做一些逻辑处理(处理get请求或post请求)

修改后如下:

代码语言:javascript
代码运行次数:0
运行
复制
# encoding: utf-8

import requests
import json

class RunMethod:

    @staticmethod   # 构造为静态方法后,既可以通过类的命名空间调用,也可以通过实例调用,即self
    def get_request(url, data):
        r = requests.get(url=url, params=data)
        re = r.json()
        return json.dumps(re, indent=2, ensure_ascii=False)

    def post_request(url, data):   # 不构造为静态方法,不能通过self调用,需要通过类的命名空间调用
        r = requests.post(url=url, data=data)
        re = r.json()
        return json.dumps(re, indent=2, ensure_ascii=False)

    def run_main(self, method, url, data):
        if method == "GET":
            result = RunMethod.get_request(url, data)  # 通过类名调用(类的命名空间)
            # result = self.get_request(url, data)    # 通过实例调用
        else:
            result = RunMethod.post_request(url, data)  # 因为post_request()只是一个普通函数,不是静态方法和实例方法,所以只能通过类名调用
        return result


if __name__ == "__main__":
 
        url = "http://localhost:8088/ApprExclusiveInterface/api/enterprise/info/consult/save.v"
        data = {
            'clientCode': '韩',
            'topic': '测试接口',
            'content': '测试接口',
            'resrcType': 0
        }
        r = RunMethod()   # 需要注意的是如果类名后加上了(),表示对类进行了实例化
        t = r.run_main("GET", url, data)
        print(t)
        print(RunMethod.get_request(url, data))  # 直接通过类名调用

值得注意的是,假如我们在一个类下定义了2个方法A,B

其中A既不是静态方法,也不是类(实例)方法

那么B在调用A时,或者在类外面调用类中的A方法时,必须使用类名来调用(即类的命名空间),

形如:Class.A(),不过实际上并没有人这样干就是了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 冰霜blog 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档