在 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):
...
我正在使用 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 构造方法,但我想知道每次程序运行时如何手动输入它们。
方法 __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):
...