python什么时候用静态方法_Python何时使用实例与静态方法

我正在努力理解何时应该使用实例方法还是静态方法。另外,我不知道我的函数是否是静态的,因为没有@staticmethod装饰器。当我调用其中一种方法时,是否可以访问类函数?

我正在开发一个将信息发送到数据库的网络爬虫。它设置为每周运行一次。我的代码的结构看起来像这样

import libraries...

class Get:

def build_url(url_paramater1, url_parameter2, request_date):

return url_with_parameters

def web_data(request_date, url_parameter1, url_parameter2): #no use of self

# using parameters pull the variables to look up in the database

for a in db_info:

url = build_url(a, url_parameter2, request_date)

x = requests.Session().get(url, proxies).json()

#save data to the database

return None

#same type of function for pulling the web data from the database and parsing it

if __name__ == ‘__main__’:

Get.web_data(request_date, url_parameter1, url_parameter2)

Parse.web_data(get_date, parameter) #to illustrate the second part of the scrapper

那是基本结构。该代码具有功能,但是我不知道我是否正确使用了这些方法(功能?),将来可能会错过使用我的代码的方式。我什至可能在编写错误的代码,这些错误的代码会导致错误,这些错误仅由于我没有遵循最佳实践而很难调试。

在阅读有关何时使用类和实例方法之后。我不明白为什么要使用它们。如果要构建URL或从网站提取数据,请调用build_url或get_web_data函数。我不需要该函数的实例来跟踪任何单独的东西。我无法想象何时需要将某些东西分开,我认为这是问题的一部分。

我认为我的问题与之前的问题不同的原因是:当我坐下来编写代码时,解释差异的概念示例似乎对我没有帮助。我还没有遇到用各种方法解决的现实问题,这些方法显示了什至我什至应该使用实例方法,但是在查看概念性代码示例时,实例方法似乎是必需的。

谢谢!

解决方案

您在代码中编写的函数是实例方法,但是编写不正确。实例方法必须具有self第一个参数

即def build_url(self, url_paramater1, url_parameter2, request_date):

然后你这样称呼它

get_inst = Get()

get.build_url(url_paramater1, url_parameter2, request_date)

这个self参数是python提供的,它允许您访问类的所有属性和函数(静态或非静态)Get。

如果您不需要访问其他函数或函数中的属性,则可以添加@staticmethod装饰器并删除self参数

@staticmethod

def build_url(url_paramater1, url_parameter2, request_date):

然后您可以直接调用它

Get.build_url(url_paramater1, url_parameter2, request_date)

或从类实例中调用

get_inst = Get()

get.build_url(url_paramater1, url_parameter2, request_date)

但是您可能会问当前代码有什么问题?尝试从这样的实例调用它,您将看到问题

get_inst = Get()

get.build_url(url_paramater1, url_parameter2, request_date)

创建实例非常有用的示例:假设您要创建一个聊天客户端。

你可以这样写代码

class Chat:

def send(server_url, message):

connection = connect(server_url)

connection.write(message)

connection.close()

def read(server_url):

connection = connect(server_url)

message = connection.read()

connection.close()

return message

但是更干净,更好的方法是:

class Chat:

def __init__(server_url):

# Initialize connection only once when instance is created

self.connection = connect(server_url)

def __del__()

# Close connection only once when instance is deleted

self.connection.close()

def send(self, message):

self.connection.write(message)

def read(self):

return self.connection.read()

要使用最后一堂课

# Create new instance and pass server_url as argument

chat = Chat("http://example.com/chat")

chat.send("Hello")

chat.read()

# deleting chat causes __del__ function to be called and connection be closed

delete chat

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值