2014-01-10 27 views
0

我有一個接口和一個抽象基類在C#4.0:使用與IronPython的抽象基類屬性未如預期

public interface IScript 
{ 
    ScriptResources Resources { get; set; } 
    string MessageLog { get; } 

    void Init(); 
    ScriptResult Execute(); 
    void Cleanup(); 
} 

public abstract class Script : IScript 
{ 
    public ScriptResources Resources { get; set; } 
    public string MessageLog { get; protected set; } 

    public abstract void Init(); 

    public ScriptResult Execute() 
    { 
     try 
     { 
      Init(); 
      ScriptResult = RunScript(); 
     } 
     finally 
     { 
      Cleanup(); 
     } 

     return ScriptResult; 
    } 

    protected abstract ScriptResult RunScript(); 

    public abstract void Cleanup(); 
} 

在IronPython的一面,我有以下類從C#腳本類繼承:

import clr 
clr.AddReference("MyCSharpLibrary.dll") 
from MyCSharpLibrary import * 

class IronPythonScript(Script): 
    def __new__(self): 
     return Script.__new__(self) 

    def __init__(self): 
     return Script.__init__(self) 

    def Init(self): 
     Script.LogMessage(self, "< IronPython: Init() >") 
     Script.LogMessage(self, "") 
     # Do stuff 

    def RunScript(self): 
     Script.LogMessage(self, "< IronPython: RunScript() >") 
     # Do stuff 

    def Cleanup(self): 
     Script.LogMessage(self, "< IronPython: Cleanup() >") 
     # Do stuff 

然而,爲了使用基類的腳本屬性(MessageLog,資源)的IronPython的我不得不使用下面的相當醜陋的語法,這似乎我錯了:

Script.MessageLog.__set__(self, "TEST VALUE") 
print Script.MessageLog.__get__(self) 

我在做什麼錯? (注:我有限的經驗與Python)

回答

1

怎麼樣:

self.MessageLog = "TEST VALUE" 
print self.MessageLog 
+0

嗯,這是令人尷尬的。我發誓,我以前嘗試過,但得到了類型例外。 – Brett

+0

我想我應該多讀一點關於Python中的類和實例屬性,我會意識到我在這種情況下使用了不正確的類屬性。謝謝。 – Brett