Question about None

Christian Heimes lists at cheimes.de
Fri Jun 12 10:32:27 EDT 2009


Paul LaFollette schrieb:
> 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

How about the canonical way to check if an object is None?

    assert Node is None

None is a singleton. Python guarantees that there is exactly one None
object and on this account only one instance of NoneType. In Python 3.x
you can't even overwrite the global variable None. User code shouldn't
use NoneType at all.

 >>> type(None)
<class 'NoneType'>
>>> type(None)()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot create 'NoneType' instances
>>> None = 1
  File "<stdin>", line 1
SyntaxError: assignment to keyword

The singletons True and False have a similar behavior. It's not possible
to overwrite them as well. The bool type always returns either the
singleton True or the singleton False.

>>> True = False
  File "<stdin>", line 1
SyntaxError: assignment to keyword
>>> type(True)
<class 'bool'>
>>> type(True) is bool
True
>>> bool(42)
True




More information about the Python-list mailing list