该项目的结构是:
project
- main.py
- session.py
- spider.py
session.py中有一个类:
import requests
class Session:
def __init__(self):
self.session = requests.Session()
print('Session created.')
Run Code Online (Sandbox Code Playgroud)
而spider.py中的另一个类:
from session import Session
class Spider:
def __init__(self, sess: Session = Session()):
print('Spider created.')
Run Code Online (Sandbox Code Playgroud)
当我Spider从main.py中的spider.py 导入类时,如下所示:
from spider import Spider
if __name__ == '__main__':
print('Main function.')
spider = Spider()
Run Code Online (Sandbox Code Playgroud)
并运行main.py,我得到:
会话已创建.
主功能.
蜘蛛创造了.
这让我很困惑.我认为__init__是初始化实例时使用的初始函数,但在这种情况下,在spider.py中导入时调用__init__函数.我认为它必须与spider.py 中函数的默认值相关,但为什么呢?SessionSession__init__
kal*_*ann 10
参数的默认值仅在python中计算一次.这是记录在这里,并在这里按规定JETM.
因此,Session当您spider作为sessspiders __init__方法的参数的默认值导入时,会创建一个isntance .
如果您不希望这样的行为,您可以使用None默认值并Sesssion在__init__方法内创建实例,如果没有提供其他值,如MatsLindh和FHTMitchel所指出的那样:
...
def __init__(self, sess: Session = None):
if sess is None:
sess = Session()
print('Spider created.')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |