2013-10-14 23 views
2

我想寫下面的函數,它需要一個隨機的DotNet類,該類已知具有一個名爲Amount的屬性,並返回該屬性的Dot Net類型的一些指示。 Amount通常是可空類型,因此instance將在創建時以null(Python None)結束。Ironpython得到dot網類的屬性

def learn_type(test_class): 

    '''Given Dot Net class test_class, return the type of the nullable Amount property.''' 

    instance = test_class() 
    answer = type(instance.Amount) # always NoneType 

    return answer 

什麼是正確的方式來獲得instance.Amount類型的指示?

除了上面的代碼,我已經嘗試反思test_class.Amountinstance.Amount。我能夠獲得getset_descriptor,但我無法確定如何從該對象中提取類型指示符。

這是針對某些ETL代碼的,其目標之一是通知調用程序輸入中遇到的錯誤數據類型。我的代碼想知道遇到了什麼,以及期望的類型。

+0

你想對類型信息做什麼?你想如何處理信息?你對.NET類型或等價的原始python類型感興趣嗎? –

+0

我的目標是雙重的 - 爲合理數量的常見類型執行明智的類型轉換,併爲調用程序提供關於我無法分配的屬性的信息(包括類型)。 –

回答

2

最好的辦法是使用普通的.NET的System.Reflection的API:

instance = test_class() 
answer = instance.GetType().GetProperty("Amount").PropertyType 

的出發點是System.Type;所有的.NET類型元數據都可以從那裏獲得。

+0

不得不爲NULLABLE類型做一些額外的工作,但是這個工作非常順利。 –