Python 如何调用一个类以在主函数中使用

Python 如何调用一个类以在主函数中使用,python,class,main,Python,Class,Main,我想在我的主函数中使用一个类,但不知道如何使用它。 以下是我到目前为止所做的尝试。以下代码仅用于演示目的 代码已按照@furas的建议进行编辑。 import requests from bs4 import BeautifulSoup from class.embed import Embed def request(r): s = requests.Session() r = s.get(url) return r def data(r): soup =

我想在我的主函数中使用一个类,但不知道如何使用它。 以下是我到目前为止所做的尝试。以下代码仅用于演示目的

代码已按照@furas的建议进行编辑。

import requests
from bs4 import BeautifulSoup
from class.embed import Embed


def request(r):
    s = requests.Session()
    r = s.get(url)
    return r

def data(r):
    soup = BeautifulSoup(r.txt, 'lxml')
    title = soup.select('.ac-ln-title-comingsoon')
    return title

def main():
    url = 'https://www.apple.com/macbook-pro-16/'
    old_title = None
    while True:
        r = request(url)
        title = data(r)
        if title != old_title:
            url = 'https://www.apple.com/macbook-pro-16/specs/'
            embed_class = Embed(url)
            print(price, processor)
        else:
            print('Lorem ipsum')

if __name__ == "__main__":
    main()
这是我的班级:

class Embed:
    def __init__(self, url):
        self.r = request(url)
    def content(r):
        soup = BeautifulSoup(self.r.text, 'lxml')
        price = soup.select('.column  large-6').get_text()
        processor = soup.select('.techspecs-column').get_text()

我从您的问题中了解到,您希望创建该类的对象,并在参数化构造函数中传递url,然后在主函数中使用该url?

以下是您的主要功能:

def main():
  url = 'https://www.apple.com/macbook-pro-16/'
  old_title = None
  while True:
    r = request(url)
    title = data(r)
    if title != old_title:
        url = 'https://www.apple.com/macbook-pro-16/specs/'
        embed_class = Embed(**url**)
        embed_class.content()
        print(embed_class.price, embed_class.productData)
    else:
        print('Lorem ipsum')
下面应该是您的嵌入类:

class Embed:
def __init__(url):
    r = request(url)
def content(r):
    soup = BeautifulSoup(r.text, 'lxml')
    price = soup.select('.column  large-6').get_text()
    processor = soup.select('.techspecs-column').get_text()
    productData= soup.select('#name for extracting productdata#').get_text()
请不要复制我编写的相同代码。首先,试着从中理解。如果有任何问题,请告诉我。您可能对productdata是如何产生的有疑问。您必须在查询名称中搜索productData,否则您可能知道productData从何处获得。代码的其余部分,我的意思是,您对如何调用类成员并在主函数中使用它们的基本疑问现在已经清楚了。

import requests
from bs4 import BeautifulSoup
from class.embed import Embed


def request(r):
    s = requests.Session()
    r = s.get(url)
    return r

def data(r):
    soup = BeautifulSoup(r.txt, 'lxml')
    title = soup.select('.ac-ln-title-comingsoon')
    return title

def main():
    url = 'https://www.apple.com/macbook-pro-16/'
    old_title = None
    while True:
        r = request(url)
        title = data(r)
        if title != old_title:
            url = 'https://www.apple.com/macbook-pro-16/specs/'
            embed_class = Embed(url)
            print(price, processor)
        else:
            print('Lorem ipsum')

if __name__ == "__main__":
    main()

谢谢。

首先,在所有方法中,您必须使用
self
作为第一个参数。你什么时候跑

embed_class.content()
然后Python将运行

Embed.content(embed_class)
因此,它将实例
embed_class
分配给
self


其次,您应该使用
self.
从一个方法访问另一个方法中的变量

方法还应该使用
return
,这样您就可以在方法之外使用它的值


顺便说一句:

select()
提供列表(即使它只找到一个元素或找不到任何元素),因此您不能使用
select().get_text()
,但您必须使用
get_text()
对每个元素单独使用
进行循环或列表理解。即

 price = [item.get_text(strip=True) for item in price]
该页面有两个价格和两个处理器说明,所以您可能需要
进行
-循环,以便以更可读的方式显示它。我将其显示为列表

我跳过了
-循环,因为它对我没用。我还更改了
select()
中的类,以便只获取页面的一部分



首先,您应该在
\uuuu init\uuuu(self,url)
中使用
self
。然后你应该发送
url
作为参数
embed\u class=embed(url)
你应该在class-
self.r=request(url)
中使用
self.r=request(url)
,以其他方法访问这个请求-
BeautifulSoup(self.r.text,…)
不要更改有问题的代码,因为这种方式可能会导致注释不适合您的代码。如果必须更改代码,请在末尾添加文本
“EDIT:”
没有
productData
,这是一个打字错误,现已更正。为什么要调用
embed\u class.content()
,我的意思是
embed\u class=embed(**url**)
还不够吗?@julian
embed(url)
只运行
\uuu init\uu
。要获得价格,您还必须运行
content()
。但是这个答案中的代码充满了bug。