码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-05-08 23:04:41      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:clu   参数   col   client   ascii   mil   调用   ram   处理   

类里面的方法有3种:类的实例方法(平时常用的带有self的方法)、静态方法(@staticmethod )、类方法(@classmethod)

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

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

(2)静态方法(由@staticmethod装饰的方法)、类方法(由@classmethod装饰的方法),可以被类或类的实例对象调用。静态方法,参数没有要求。


先看如下代码

技术分享图片

其实上述代码中的get_request()和post_request()方法可以写为静态方法,因为这里并不需要通过实例来调用这两个方法,它们只是做一些逻辑处理(处理get请求或post请求)

修改后如下:

# 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(),不过这个时候A已经不能叫方法了,只是一个普通的函数,只是定义在了类里面,了解一下就行,实际上并没有人这样干就是了(在类里面要么构造静态方法,要么构造类方法)


2018-05-08 22:40:00

 

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

标签:clu   参数   col   client   ascii   mil   调用   ram   处理   

原文地址:https://www.cnblogs.com/hanmk/p/9011509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!