亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中擴展現有的類實例

在 Python 中擴展現有的類實例

森林海 2022-07-12 14:45:45
我有一個element由另一個類方法返回的對象,我不一定有權更改。>>> from selenium.webdriver import Chrome>>> browser = Chrome()>>> browser.get('https://www.google.com')>>> element = driver.find_element_by_tag_name('input')>>> type(element)<class 'selenium.webdriver.remote.webelement.WebElement'>   我有一個單獨的類來擴展元素的功能。>>> class Input:>>>     def __init__(self, element):>>>         assert element.tag_name == 'input', 'Element must be of type "input"'>>>         self.element = element>>>         self.browser = element.parent>>>     def is_enabled(self):>>>         return self.element.is_enabled()>>>     @property>>>     def value(self):>>>         return self.element.get_attribute('value')目前我使用它的方式是傳遞element給類:>>> input = Input(element)>>> input.is_enabled() # Same as input.element.is_enabled()True我希望能夠更輕松地訪問原始對象的屬性,而不必在調用中指定它。例如:而不是這個:>>> input.element.tag_name'input'做這個:>>> input.tag_name'input'我將如何實現這樣的事情?
查看完整描述

1 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

您可以Input通過實現該__getattr__()方法將您的類轉換為代理,如Container下面的類:


class Example:

    def __init__(self):

        self.tag_name = 'name'

    def foo(self):

        return 'foo'

    def bar(self, param):

        return param


class Container:

    def __init__(self, contained):

        self.contained = contained


    def zoo(self):

        return 0


    def __getattr__(self, item):

        if hasattr(self.contained, item):

            return getattr(self.contained,item)

        #raise item


c = Container(Example())

print(c.foo())

print(c.bar('BAR'))

print(c.tag_name)

輸出:


foo

BAR

name

該類Container現在將任何未知屬性訪問轉發給其contained成員,當然,該成員可能具有也可能沒有所需的屬性。


查看完整回答
反對 回復 2022-07-12
  • 1 回答
  • 0 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號