В .net нет способа иметь методы или поля, которые на самом деле не являются членами класса. Boo несколько скрывает это, имея неявный класс для основного файла в модуле (как вы заметили), но при импорте вам все равно нужно получить к нему доступ как член.
Для статики вы должны сначала ссылаться на тип, а затем на член, поэтому в вашем примере распечатка версии будет выглядеть так:
import MyLibrary
print (MainClass.Version)
Конечно, это не «правильный» способ хранить информацию о версии в .net, а вместо этого использовать атрибуты уровня сборки. Это было бы больше похоже на это:
[assembly: System.Reflection.AssemblyVersion("1.0")]
namespace MyLibrary
[Module]
class MainClass:
pass
Затем, получив версию, которую вы сделали бы с помощью отражения, есть несколько способов получить сборку, но проще всего получить Type, а затем его сборку:
import System
import System.Reflection
import MyLibrary
atts = typeof(MainClass).Assembly \
.GetCustomAttributes(typeof(AssemblyVersionAttribute), false)
version = (atts[0] as AssemblyVersionAttribute).Version
print(version)