Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python描述符能否用于实例化另一个类的_init_____中的属性?_Python_Descriptor - Fatal编程技术网

python描述符能否用于实例化另一个类的_init_____中的属性?

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

或者属性必须在任何类方法之外定义

所以我的描述符对象是这个。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属性时,我可以做些什么使这些可用


谢谢

恐怕这不可能,因为您的属性
用户名将通过正常的属性访问来解析,请参见

可能您可以通过覆盖
\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