0

または、属性をクラスメソッドの外部で定義する必要がありますか?

だから私の記述子オブジェクトはこれです。IDNオブジェクトにはすでにUserNameFieldに関する情報が含まれているので、それを使用したいと思います。

class UserNameElement(basePageElement):
    _testMethodName="UserNameElement Test method"
    def __init__(self, IDN, PTF):
        print "creating UserNameElement"
        self.locator =  IDN.UserNameField()

そして、これが私の呼び出しクラスです。UserNameElementオブジェクトをインスタンス化する場所

class LoginPageObject(basePageObject):
    _testMethodName="LoginPageObject Test method"
    print "creating LoginPageObject"
    def __init__(self, BaseURL):
        super(LoginPageObject, self).__init__()
        self.username=UserNameElement(IDN=self.IDN, PTF=self.PTF)

標準的なプロセスでは、次のように、username=が一般的なクラス定義に含まれるようです。

class LoginPageObject(basePageObject):
    _testMethodName="LoginPageObject Test   method"
    username=UserNameElement()
    print "creating LoginPageObject"
    def __init__(self, BaseURL):
        super(LoginPageObject, self).__init__()

しかし、basePageObjectクラスで定義したPTFとIDNがありません。

username属性が作成されたときにそれらを使用可能にするにはどうすればよいですか?

ありがとう

4

2 に答える 2

3

usernameあなたの属性は通常の属性アクセスを介して解決されるため、それは不可能になると思います。http://docs.python.org/howto/descriptor.html#invoking-descriptorsを参照してください。

__getattribute__何をするかをオーバーライドしてシミュレートすることで逃げることができるかもしれtype.__getattribute__()ません

class MyD(object):
    def __init__(self, val):
        self.val = val

    def __get__(self, obj, objtype):
        return self.val

    def __set__(self, obj, val):
        self.val = val

class C(object):
    a = MyD(42)
    def __init__(self):
        self.d = MyD(42)

    def __getattribute__(self, name):
        attr = super(C, self).__getattribute__(name)
        if hasattr(attr, '__get__'):
            return attr.__get__(self, C)
        return attr

c = C()
print c.d
print c.a

出力:

42
42
于 2012-04-19T16:27:18.277 に答える
1

オブジェクトがインスタンス化されるまでユーザー名はおそらく必要ないので、オブジェクトをプロパティにしてゲッターを作成するのがおそらく最善です。

于 2012-04-19T16:37:32.420 に答える