![](/img/trans.png)
[英]The add method has already created within the base class. How do I call it from a child class with putting values
[英]Python, selenium webdriver - I need base class method to return type of its child class. How to achieve it?
我對 Python(和 stackoverflow)很陌生,我需要一些幫助。 我有 2 個課程如下
class baseClass(object):
def __init__(self):
self.attribute = None
def baseMethod(self):
return 'xxx' + str(self.attribute)
class classA(baseClass):
field = "test"
def __init__(self):
self.attribute = "attribute value"
我想做如下事情:
objectA = classA()
afterBaseMethod = objectA.baseMethod()
afterBaseMethod.field
但我收到錯誤消息 AttributeError: 'str' object has no attribute 'field'
事實上,我希望 baseMethod() 返回類型 objectA (所以我的子類類型)。 我怎樣才能改變我的類定義來實現這一目標?
對不起,伙計們,我不夠精確,我想做什么。 事實上,我想在 python 中實現頁面對象以進行 webdriver 測試。 我的代碼如下。
from selenium import webdriver
########## classes definitions
class BasePageObject:
def __init__(self, driver):
self.locator = None
self.driver = driver
def getByLocator(self):
return self.driver.find_element_by_css_selector(self.locator)
class MainPage(BasePageObject):
def __init__(self, driver):
self.driver = driver
def getHeader(self):
# I expect here to receive HeaderPageObject, not WebElement (as returned by getByLocator())
return HeaderPageObject(self.driver).getByLocator()
class HeaderPageObject(BasePageObject):
def __init__(self, driver):
self.driver = driver
self.locator = '#header'
def doSomethingWithHeader(self):
pass
###########################
driver = webdriver.Firefox()
driver.get("https://www.linkedin.com")
mainPage = MainPage(driver)
header = mainPage.getHeader()
header.doSomethingWithHeader()
當我運行它時,我得到 header.doSomethingWithHeader() AttributeError: 'WebElement' object has no attribute 'doSomethingWithHeader'
您發布的代碼只是定義了這兩個類,這意味着您甚至沒有告訴我們這個報告的錯誤發生在哪里,或者您做了什么導致它發生。 但是 Python 的類機制可以很好地完成這項任務。
對象知道它們是什么類型,因此即使從超類繼承方法,它也會在子類實例上運行(即self
將是子類的實例)。 下面是一些代碼來演示 - 兩個類,每個類都使用基類來報告它們的類型:
class baseClass(object):
def baseMethod(self):
return type(self)
class classA(baseClass):
pass
b = baseClass()
print b.baseMethod()
a = classA()
print a.baseMethod()
哪個輸出
<class '__main__.baseClass'>
<class '__main__.classA'>
您可以看到classA
對象正確打印出其類型,因此它知道進行調用的對象類型。 我希望這能告訴你你需要知道的。
如果您希望它返回調用它的類,您可以執行以下操作:
def baseMethod(self):
return self.__class__()
但是,從您的帖子中並不清楚您還希望它做什么。 您的帖子只是顯示它返回一個字符串,該字符串對於您的類的每個實例都相同。 不清楚baseMethod
的目的是什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.