我是初学者。我写了一些代码,现在试图将它们组织到方法中,但是我完全不了解Python如何在方法之间进行通信。我的代码概述如下: pseudocode
注意,所有东西放在一起时都可以正常工作,但是现在我无法将数组从方法1转移到方法2。无论我做什么,总是无法定义某些内容。另外,运行第二种方法总是需要更多的参数,我不明白。 现在,我下面的当前代码正在返回:
NameError:名称'csvGet'未定义
if __name__ == "__main__":
# Ask for csv file path and define
file_in = input('READ FILE: ')
# Get browser driver path
chromeDriver_Path = '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/selenium/webdriver/chrome/chromedriver'
class App:
def __init__(self, file_in):
# Initialize csv file path
self.file_in = file_in
# Initialize browser driver path
self.chromeDriver_Path = chromeDriver_Path
# Inject csv file
def csvGet(self):
# Declare array for urls
urls = []
# Open csv file from path
with open(file_in, 'r') as f:
# Read csv file
reader = csv.reader(f)
# Add each row in column 11 of csv to urls array
for row in reader:
urls.append(row[11])
# Skip first row in array
urls = urls[1:]
# Return the array
return urls
# Run automatic browser
def goBrowser(self):
options = webdriver.ChromeOptions()
chrome_options = Options()
browser = webdriver.Chrome(chromeDriver_Path, chrome_options=options)
# Get array from other method
urls = csvGet(urls)
cnt = 0
for link in urls:
cnt += 1
browser.get(link)
# Do more stuff...
browser.quit()
goBrowser(csvGet)
像我五岁一样向我解释:我在做什么错了?
答案 0 :(得分:1)
App是一个class
,因此,您需要创建一个App实例并调用其方法,而不是goBrowser(csvGet)
:
app = App()
app.goBrowser()
第二,在goBrowser()
函数中,您需要调用csvGet()
。同样,由于它在类中,因此您需要以下语法:
self.csvGet()
基本上,self
是一个传递给每个方法的特殊参数-当您调用app.goBrowser()
时,它将调用goBrowser()
,并传递self=app
。在其他面向对象的语言(例如C ++或C#)中,此功能是隐藏的,但在Python中,则是公开的。
编辑:也正如shaik moeed所说,csvGet()缺少urls参数,即。
def csvGet(self, urls):
pass
...
self.csvGet(urls)
答案 1 :(得分:0)
self最适合在使用面向对象的编程时传递任何类型的变量 像这样的代码: 如果名称 ==“ 主要”: file_in = input('READ FILE:')chromeDriver_Path ='/ Library / Frameworks / Python.framework / Versions / 3.7 / lib / python3.7 / site-packages / selenium / webdriver / chrome / chromedriver'
class App:
def __init__(self, file_in, screenshotFolder):
# Initialize csv file path
self.file_in = file_in
# Initialize browser driver path
self.chromeDriver_Path = chromeDriver_Path
# Inject csv file
def csvGet(self):
# Declare array for urls
urls = []
# Open csv file from path
with open(file_in, 'r') as f:
# Read csv file
reader = csv.reader(f)
# Add each row in column 11 of csv to urls array
for row in reader:
urls.append(row[11])
# Skip first row in array
urls = urls[1:]
# Return the array
return urls
# Run automatic browser
def goBrowser(self):
options = webdriver.ChromeOptions()
chrome_options = Options()
browser = webdriver.Chrome(chromeDriver_Path, chrome_options=options)
# Get array from other method
urls = self.csvGet(urls)
cnt = 0
for link in urls:
cnt += 1
browser.get(link)
# Do more stuff...
browser.quit()
goBrowser(self)