在 Python 中输入超类变量

Input superclass variables in Python

我正在使用 Python 构建网络爬虫。我创建了一个父 class 来保存用户和密码,我想通过键盘输入。

父 class 看起来像这样:

class ParentCrawler(object):
def __init__(self):
    """Saves the user and the password"""
    self.user = input("Email: ")
    self.password = getpass.getpass("Password: ")

然后我创建了那个父 class 的子 class,其想法是它的 运行 并行实例,以使爬行更快。但是每次我创建一个新的子对象 class,我都被要求输入用户并再次通过,如下图所示,这不是我想要的。

When a child object is created...

我知道我可以对我的用户进行硬编码并传递给父 class 构造方法,但我想知道每次程序运行时如何手动输入它们。

每次创建新实例时,class 的

方法 __init__ 将是 运行。由于这些值只需要一次,并且您不需要为每个实例使用不同的值,因此在 class 初始化程序或其他方法中请求它们的值没有什么意义。

此外,如果您的 classes 与终端上的用户交互无关,则没有理由在 class 代码中硬编码此用户交互 - 如果您对您的程序将使用相同的 class,并从配置文件或发布的 Web 表单中获取此信息,例如,您将无法以这种方式使用这些 classes。

实例化 class 时将凭据作为强制值传递没有错。要在终端以交互方式继续开发和使用您的程序,您可以创建一个简单的函数来请求这些输入数据,并且 return 它们 -

NUM_WORKERS = 4


def get_credentials():
    user = input("Email: ")
    password = getpass.getpass("Password: ")
    return user, password

def main():
    workers = []
    user, password = get_credentials()
    for i in range(NUM_WORKERS):
         worker = Crawler(user, password)
         workers.append(worker)
         worker.start()
    ...


class Crawler:
     def __init__(self, user, password):
           ...