或者属性是否必须在任何类方法之外定义?
所以我的描述符对象就是这个。 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 = in放在通用类定义中,如下所示:
class LoginPageObject(basePageObject):
_testMethodName="LoginPageObject Test method"
username=UserNameElement()
print "creating LoginPageObject"
def __init__(self, BaseURL):
super(LoginPageObject, self).__init__()
但是我没有在basePageObject类中定义的PTF和IDN。
创建用户名属性后,我该怎么做才能使这些可用?
由于
答案 0 :(得分: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
答案 1 :(得分:1)
由于在实例化对象之前您可能不需要用户名,因此最好将其设为属性并为其编写getter。