2012-04-19 12 views
0

属性はクラスメソッドの外で定義する必要がありますか?別のクラスの__init__で属性をインスタンス化するためにpython記述子を使用できますか?

私の記述子オブジェクトはこれです。 IDNオブジェクトには既にUserNameFieldに関する情報があるので、私はそれを使いたいと思います。

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

ここに私の呼び出しクラスがあります。

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

しかし、私が持っていない:私は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) 

をインスタンス化したい場合は標準的なプロセスは次のように、一般的なクラス定義でユーザ名=中を置くようです私がbasePageObjectクラスで定義するPTFとIDN。

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

おかげ

答えて

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

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

関連する問題