2014-03-01 19 views
2

我對Python(和stackoverflow)很新,我需要一些幫助。我有2類,如下Python,selenium webdriver - 我需要基類方法來返回其子類的類型。如何實現它?

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的:「海峽」對象有沒有屬性「場」

其實我想對於baseMethod()返回類型對象A(所以我的子類型)。 如何更改我的類定義以實現該目標?


對不起,夥計們,我不夠精確,我想做的事情。實際上我想在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」對象有沒有屬性「doSomethingWithHeader」

+1

它通常是有點半信半疑地有需要知道它的子類的類。你想在這裏完成什麼? – BrenBarn

+0

我需要很多這樣的子類和baseMethod(個體經營)就能準確地對所有的人都以同樣的方式,但我需要它返回類從調用它的類型,因爲每個子類都將有自己的Fileds /方法,這將是在調用baseMethod()(在基類中定義)之後使用。 – donatelo

+0

如何顯示你想要做的事情的代碼應該是有意義的? –

回答

0

如果你希望它返回類從它被叫,你可以這樣做:

def baseMethod(self): 
    return self.__class__() 

但是,從你的文章中不清楚你想要它做什麼。你的文章只是顯示它返回的字符串對於你的類的每個實例都是一樣的。目前還不清楚baseMethod的目的是什麼。

2

你簡單地發佈代碼定義了兩個類,這意味着,如果發生這個錯誤報告或你做了什麼來誘導它,你還沒有告訴我們。但是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對象打印正確的類型了,所以它知道打電話的是什麼類型的對象。我希望這能告訴你你需要知道什麼。

相關問題