在python中如何从新的构造函数调用方法?

2024-10-03 09:12:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在call get_driver_path方法内运行__new__,当我尝试运行完整代码时出现以下错误:

TypeError: unbound method get_chrome_driver() must be called with
WebBrowserManager instance as first argument (got str instance instead

代码如下:

def __new__(self, driver = 'firefox'):
    if not self._instance:
        self._instance = super(WebBrowserManager, self).__new__(self)
        self._profile.native_events_enabled = True
        self.data = {}
        self._system = platform.system()
        if self._local:
            if driver == 'firefox':
                self.browser = webdriver.Firefox(self._profile)
            elif driver == 'chrome':
                self.browser = self.get_chrome_driver(self._system, driver)
            elif driver == 'ie':
                assert self._system == 'Windows', 'Tests on Internet Explorer are only supported on Windows'
                self.browser = webdriver.Ie(self.get_driver_path(driver))
    return self._instance

def get_driver_path(self, driver):
    driver_name = ''
    if driver == 'ie':
        driver_name = 'IEDriverServer.exe'
    elif driver == 'chrome':
       driver_name = 'chromedriver.exe'
    driver_path = "selenium_drivers\\" + driver_name 
    os.environ["webdriver." + driver + ".driver"] = driver_path
    return driver_path

Tags: pathinstance代码nameselfbrowsernewget
1条回答
网友
1楼 · 发布于 2024-10-03 09:12:24

由于您将其设置为实例方法,因此需要在__new__方法中创建的实例上调用它(该方法是静态的;例如,不绑定到实例或类):

self.browser = webdriver.Ie(self._instance.get_driver_path(driver))

您可以将该方法设为静态方法或类方法,此时您可以通过__new__的第一个参数使用它(这是类,不是实例;通常不使用名称self,而是cls):

@staticmethod
def get_driver_path(driver):

请注意,staticmethod然后不接受self参数,但您的get_driver_path()实现无论如何都不会使用该参数。你知道吗

相关问题 更多 >