Ask Your Question

How come abs(x) works?

asked 2012-06-12 21:36:56 +0100

Eviatar Bach gravatar image

updated 2012-06-12 21:37:21 +0100


I notice that abs is a Python built-in function, but it also works symbolically:

sage: abs(x)
sage: bool(abs(x) == abs_symbolic(x))
sage: preparse('abs(x)')

What's going on here? Obviously the Python function should not accept a Sage type.

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted

answered 2012-06-12 23:23:50 +0100

DSM gravatar image

updated 2012-06-12 23:23:59 +0100

Obviously the Python function should not accept a Sage type.

Why not? Python's abs calls __abs__, if it exists:

>>> class NotABuiltinClass(object):
...     def __abs__(self):
...         return 'fred'
>>> a = NotABuiltinClass()
>>> abs(a)

The wonders of duck typing. :-)

edit flag offensive delete link more


You're like a Python tutorial waiting to happen, @DSM!

kcrisman gravatar imagekcrisman ( 2012-06-13 00:00:52 +0100 )edit

You forgot to include a doctest in your code here, very careless...

kcrisman gravatar imagekcrisman ( 2012-06-13 00:01:24 +0100 )edit

Ah, I see. I forgot about the existence of `__abs__`.

Eviatar Bach gravatar imageEviatar Bach ( 2012-06-13 00:20:47 +0100 )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: 2012-06-12 21:36:56 +0100

Seen: 575 times

Last updated: Jun 12 '12