__get__
クライアントコードで便利に使用できるように、特定のタイプのデータに対して記述子を使用してthinkプロキシを作成しようとしています(例で最もよく示されています)。
class Value(object):
def __init__(self, val):
self.val = val
def __get__(self, instance, owner):
return self.val
class Container(object):
x = Value(1)
y = [ Value(2), Value(3) ]
c = Container()
assert c.x == 1
assert c.y[0] == 2 # fails.
今、私はほとんど失敗する理由を理解しているので、クライアントがそれにアクセスするときに単にValueオブジェクトに直接アクセスする必要があるようにデータをラップするという私の目標を達成するためのより良い方法があるかどうか疑問に思っています(実際には、メソッドはそれを返す前に__get__
何かをします)self.val
詳細
私が取り組んでいる実際のケースは、セレンテストケースのPageObjectsとPageElementsの記述を支援するユーティリティコードです。私が提供したいのは、テスト作成者が次の形式のPageObjectsを作成するためのクリーンでシンプルな方法です。
class MyLogin(PageObject):
username_text_box = PageElement(By.ID, "username")
password_text_box = PageElement(By.ID, "password")
submit_button = PageElement(By.CLASS_NAME, "login-button")
driver = webdriver.Firefox()
driver.get("http://mypage.com")
login_page = MyLogin(driver)
login_page.username_text_box.send_keys("username01")
login_page.password_text_box.send_keys("XXXX")
login_page.submit_button.click()
PageElementクラス内で実際のWebElementをフェッチするビジネスをカプセル化しようとしていますが、クライアントがPageElementオブジェクトにアクセスした後、WebElementにアクセスできるようにしたいと考えています。リストを持つことができるので、辞書はPageObjectインスタンスをより明確にし、関連するPageElementsをグループ化するのに役立ちます。