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。

创建用户名属性后,我可以做些什么来使它们可用?

谢谢

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

由于在对象被实例化之前您可能不需要用户名,因此最好将其设为属性并为其编写一个 getter。

于 2012-04-19T16:37:32.420 回答