关于class调用的问题的认知问题

执行正常

关于class调用的问题

import requests
import re

class Get_mess():

    def __init__(self,url):
        self.url = url

    def get_words(self):
        req = requests.get(self.url).text
        pat = '<p class="de_con">(.*?)</p>'
        words = re.findall(pat,req)
        print(words)
        return words

    def get_tb_url(self):
        req = requests.get(self.url).text
        pat = '抢购:<a href="(.*?)" '
        tb_url = re.findall(pat,req)
        print(tb_url)
        return tb_url

    def get_img_url(self):
        req = requests.get(self.url).text
        pat = 'class="lazy MainImage" data-original="(.*?)"'
        img_url = re.findall(pat,req)
        print(img_url)
        return img_url

url = input('输入选单网商品url:')
message = Get_mess(url)
message.get_words()
message.get_img_url()
message.get_tb_url()

执行报错(下面执行已将图一中30行之后代码注释)

关于class调用的问题

from Send_circle_of_friends import get_data
from Send_circle_of_friends import huajuan_login
from Send_circle_of_friends import get_url

url = get_url.get_url()
get_data.Get_mess(url)
tb_url = get_data.Get_mess.get_tb_url()
words = get_data.Get_mess.get_words()
img_url = get_data.Get_mess.get_img_url()

huajuan_login.login(tb_url,words,img_url)

报错:

/usr/local/bin/python3.9 /Users/scrooge/PycharmProjects/pythonProject/Send_circle_of_friends/main.py
输入选单网商品url:http://www.xuandan.com/Detail.html?id=6897032
Traceback (most recent call last):
  File "/Users/scrooge/PycharmProjects/pythonProject/Send_circle_of_friends/main.py", line 7, in <module>
    tb_url = get_data.Get_mess.get_tb_url()
TypeError: get_tb_url() missing 1 required positional argument: 'self'

进程已结束,退出代码1

#~

关于class调用的问题的认知问题

说明:

不是很清楚为什么,在get_data文件中执行不会出问题,但是在main文件中导入get_data的函数进行调用会出现传参出错的问题,望指点,十分感谢!

Jason990420
最佳答案
def func(self, *args, **kwargs):

函数中self指的是类的实例, 实例调用函数时,会把实例隐式地代入函数,以作为第一个参数; 如果是类调用函数,则不会隐式地代入函数,自然就会少了一个参数.

所以,代码部份应该要先初始化,产生一个类新实例,再调用函数.

get_mess = get_data.Get_mess(url)
tb_url   = get_mess.get_tb_url()
words    = get_mess.get_words()
img_url  = get_mess.get_img_url()
3周前 评论
讨论数量: 1
Jason990420
def func(self, *args, **kwargs):

函数中self指的是类的实例, 实例调用函数时,会把实例隐式地代入函数,以作为第一个参数; 如果是类调用函数,则不会隐式地代入函数,自然就会少了一个参数.

所以,代码部份应该要先初始化,产生一个类新实例,再调用函数.

get_mess = get_data.Get_mess(url)
tb_url   = get_mess.get_tb_url()
words    = get_mess.get_words()
img_url  = get_mess.get_img_url()
3周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!