python描述符能否用于实例化另一个类的_init_____中的属性?
或者属性必须在任何类方法之外定义 所以我的描述符对象是这个。IDN对象已经有一些关于UserNameField的信息,所以我想使用它python描述符能否用于实例化另一个类的_init_____中的属性?,python,descriptor,Python,Descriptor,或者属性必须在任何类方法之外定义 所以我的描述符对象是这个。IDN对象已经有一些关于UserNameField的信息,所以我想使用它 class UserNameElement(basePageElement): _testMethodName="UserNameElement Test method" def __init__(self, IDN, PTF): print "creating UserNameElement" self.locat
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属性时,我可以做些什么使这些可用
谢谢恐怕这不可能,因为您的属性
用户名将通过正常的属性访问来解析,请参见
可能您可以通过覆盖\uuuu getattribute\uuuu
并模拟类型所做的操作来逃脱
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
恐怕这是不可能的,因为您的属性username
将通过正常的属性访问来解析,请参阅
可能您可以通过覆盖\uuuu getattribute\uuuu
并模拟类型所做的操作来逃脱
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
由于在对象实例化之前您可能不需要用户名,因此最好将其作为属性并为其编写getter。由于在对象实例化之前您可能不需要用户名,因此最好将其作为属性并为其编写getter