2017-09-04 233 views
-3

功能我与蟒蛇一个初学者,写了下面的代码:为什么通过调用这个函数的唯一的事情发生的是,浏览器中打开,但没有 :呼吁蟒蛇

from Main_Package.__init__ import webdriver 
browser = webdriver.Firefox() 

class provisioning: 
    def login(self): 
     browser.get('http://www.yahoo.com') 

provisioning.login() 

我的问题是给定的网址 - 如果我没有功能和课程编写 - 所有的工作都很好。

+0

仔细查看provisioning.login - 它不是一个类方法。你应该创建一个配置类的对象,然后调用登录。 – gabhijit

回答

0

您在类中被封闭的功能,只是把它外面:

from Main_Package.__init__ import webdriver 

browser = webdriver.Firefox() 

def login(): 
    browser.get('http://www.yahoo.com') 

login() 

无论如何,如果你仍然想在类中使用它,首先需要创建它的一个实例:

provisioning().login() 

或者让它staticmethod

class provisioning: 
    @staticmethod 
    def login(self): 
     browser.get('http://www.yahoo.com') 

provisioning.login() 

就个人而言,我会只需将驱动程序通过参数传递给该函数即可使用。

browser = webdriver.Firefox() 

def login(web_broswer): 
    web_broswer.get('http://www.yahoo.com') 

login(browser) 
+1

下面的工作完美:class provisioning: @staticmethod def login(self): browser.get('http://www.yahoo.com') provisioning.login() –

0

要实例化一个类时,你需要调用它的构造函数:

class Provisioning: 
    ... 

provisioning = Provisioning() 
provisioning.login() 

要导入一个包对象,你应该写:

from main_package import browser 

注:你应该尊重de PEP8命名约定。

1

创建类配置的instance然后调用它

provisioning = Provisioning() 
provisioning.login() 

只需添加这provisioning = Provisioning()

0

我会给稍长的答案在这里。我不知道代码的结构是理想的,但在离开单独暂时,因为我不完全知道你正在尝试做的事情 -

class provisioning(): 
    def login(self): # This method is defined on the object of class provisioning. 
     browser.get("http://www.yahoo.com") 

一种更好的方式来处理这个会是 - (没有很多的错误处理)

myclass.py说 -

class Privisioner: 
    def __init__(self, browser): 
     self.browser = browser 

    def login(self, url): 
     self.brwoser.get(url) 

在myclass_driver.py(比方说) -

from myclass import Provisioner 
from Main_Package import webdriver # (no need for explicit MainPackage.__init_) 

browser = webdriver.Firefox() 
provisioning_object = Provisioner(browser=browser) 
provisioning_object.login(url="http://www.yahoo.com") 

可以选择使'登录'方法为@classmethod。阅读the documentation,是否应该使用装饰器。现在,我认为这太复杂了,所以上面提到的东西应该更简单些。