We've recently been discussing a bug (
http://www.codeplex.com/IronPython/WorkItem/View.aspx?WorkItemId=16323 )
internally and thought we'd get some broader input on it. Just so you don't
have to click on this link this bug is all about how properties get imported
and additionally how we deal with static classes in the face of import.
There's several different aspects to this. First we have whether the class
you're doing an import from is a static class or an instance class. Next we
have whether the user is doing an import * or from import. And finally we have
whether the members being extracted are properties/methods and whether they're
instance or static members. Let's take a look at each of those...
First if the class is a static class life is pretty good. A .NET static class
is much like a Python module. For example consider the class System.Math.
This contains a bunch of static methods and some read-only fields. Doing from
System.Math import * seems perfectly reasonable in this case. We're currently
thinking about treating these types much like a module with __all__ defined on
it - and we'll even add __all__ to the type. The current thoughts on what goes
into __all__ is:
__all__ contains all members except:
__doc__/__class__
Properties/indexers
Non-const/read-only fields
Built-in methods/functions inherited from non-static types
(really just object unless you use ilasm to create your static type)
Next we have import * vs. from import. Import * should naturally respect
__all__ so for static classes it will follow the above rules. From staticClass
import x should allow importing of anything from a module as long as it exists
- so it'll work the same way for static classes as well. That will allow "from
System.Environment import CommandLine" to work will bring in the value for the
command line. Because non-static types won't have __all__ we will disallow
from System.DateTime import *.
Now it starts to get tricky when you have a non-static class because we have
instance vs static members. To enable a better story w/ .NET we would like to
enable from System.DateTime import Parse - supporting the import of static
functions. But the interesting question then becomes should we allow from
System.DateTime import Now - a static property? Finally, should we allow from
System.DateTime import AddMonths - an instance method?
So in summary the static classes seem to be straight forward. Instance members
and non-static classes make the story much more complicated. We'd love to hear
what everyone thinks about the trickier cases or the plan in general.
_______________________________________________
Users mailing list
[email protected]
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com