默认情况下调用父构造函数?

2024-09-29 02:17:43 发布

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

下面是pythonpage_object文档中的示例:

 from page_objects import PageObject, PageElement
 from selenium import webdriver

 class LoginPage(PageObject):
        username = PageElement(id_='username')
        password = PageElement(name='password')
        login = PageElement(css='input[type="submit"]')

 driver = webdriver.PhantomJS()
 driver.get("http://example.com")
 page = LoginPage(driver)
 page.username = 'secret'
 page.password = 'squirrel'
 assert page.username.text == 'secret'
 page.login.click()

困扰我的是我们创建了一个LoginPage,并向它的构造函数提供了一个driver,但是我们没有在LoginPage类中定义{}方法。在

这是否意味着父类PageObject的构造函数是用driver参数调用的?我认为python不会隐式调用父级的构造函数?在


Tags: from文档importsecretobjectdriverpageusername
1条回答
网友
1楼 · 发布于 2024-09-29 02:17:43

__init__方法只是一个方法,因此python对它执行的查找与其他方法相同。如果类B没有定义方法/属性x,那么python会查找它的基类A等等,直到找到属性/方法或失败为止。在

一个简单的例子:

>>> class A:
...     def method(self):
...         print('A')
... 
>>> class B(A): pass
... 
>>> class C(B):
...     def method(self):
...         print('C')
... 
>>> a = A()
>>> b = B()
>>> c = C()
>>> a.method()
A
>>> b.method()  # doesn't find B.method, and so uses A.method
A
>>> c.method()
C

__init__也是一样:因为LoginPage没有定义__init__,python查找PageObject类并在那里找到它的定义。在

当我们说“python不隐式调用父类构造函数”时,意思是如果定义一个__init__方法,解释器将只调用该方法,而不是调用所有父类__init__,因此,如果要调用父类构造函数,则必须显式地调用。在

注意这些类别之间的差异:

^{pr2}$

相关问题 更多 >