Hello, This should work for you:
In [1]: import types In [2]: isinstance(None, types.NoneType) Out[2]: True Best regards, Javier 2009/6/12 Paul LaFollette <paul.lafolle...@gmail.com>: > Kind people, > > Using Python 3.0 on a Gatesware machine (XP). > I am building a class in which I want to constrain the types that can > be stored in various instance variables. For instance, I want to be > certain that self.loc contains an int. This is straightforward (as > long as I maintain the discipline of changing loc through a method > rather than just twiddling it directly. > > def setLoc(lo): > assert isinstance(lo, int), "loc must be an int" > self.loc = lo > > does the trick nicely. > > However, I also want to constrain self.next to be either an instance > of class Node, or None. I would think that the following should work > but it doesn't. > > def setNext(nxt): > assert isinstance(nxt, (Node, NoneType)), "next must be a Node" > self.next = nxt > > since type(Node) responds with <class, 'NoneType'> but the assertion > above gives "name 'NoneType' is not defined" suggesting that NoneType > is some sort of quasi-class. > > def setNext(nxt): > assert nxt==None or isinstance(nxt, Node), "next must be a Node" > self.next = nxt > > works ok, but it's uglier than it ought to be. > > So, I have three questions. > > 1) Why doesn't isinstance(nxt, (Node, NoneType)) work? > 2) is their a less ugly alternative that what I am using? > 3) (this is purely philosophical but I am curious) Would it not be > more intuitive if > isinstance(None, <anything at all>) returned true? > > Thank you for your kind attention. > Paul > -- > http://mail.python.org/mailman/listinfo/python-list > -- http://mail.python.org/mailman/listinfo/python-list