Ask Your Question

Abstract base classes

asked 2011-09-30 07:12:06 -0600

Python has a module named abc for implementing "abstract base classes", see for definitions and usage. Why is it not used in Sage ?

Example: if type(i) is 'int', isinstance (i, Integer) should be True (today it's False).

edit retag flag offensive close merge delete

2 answers

Sort by » oldest newest most voted

answered 2011-09-30 07:50:47 -0600

Mike Hansen gravatar image

One reason is that abstract base classes are relatively new (Python 2.6) and the work hasn't been done to put them in place. It will require a bit of thought about how best to use them within Sage. For example, I don't think we want isinstance(i, Integer) to be True since in Sage Integer is a concrete class wrapping an MPIR mpz_t. However, you could register Integer as numbers.Integral and then test against that.

edit flag offensive delete link more


Thanks for this very quick and precise answer

Bétréma gravatar imageBétréma ( 2011-10-01 06:22:38 -0600 )edit

answered 2011-10-01 06:40:41 -0600

So, it seems that in many situations we have to code if isinstance (n, (int, Integer)) instead of if isinstance (n, Integer), despite the fact that the latter is much more natural. Sigh.

edit flag offensive delete link more


Right now, isinstance (n,Integer) is used to check whether Cython code can directly access the wrapped gmp integer. Changing this would just move the instance checks around, but not really simplify anything.

Volker Braun gravatar imageVolker Braun ( 2011-10-02 06:47:24 -0600 )edit

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools


Asked: 2011-09-30 07:12:06 -0600

Seen: 128 times

Last updated: Oct 01 '11