Eénwaardige operatoren zijn operatoren die op een enkel object werken, dus niet in combinatie met een ander object. Een typisch voorbeeld is het min-teken (-) dat je voor een getal kunt zetten om het negatief te maken. Je kunt sommige eenwaardige operatoren overloaden, evenals een aantal basale functies die op een enkel object werken.

class Quaternion:
    def __init__( self, a, b, c, d ):
        self.a, self.b, self.c, self.d = a, b, c, d
    def __repr__( self ):
        return "({},{}i,{}j,{}k)".format( self.a, self.b, 
            self.c, self.d )
    def __neg__( self ):
        return Quaternion( -self.a, -self.b, -self.c, -self.d )
    def __abs__( self ):
        return Quaternion( abs( self.a ), abs( self.b ), 
            abs( self.c ), abs( self.d ) )
    def __bytes__( self ):
        return self.__str__().encode( "utf-8" )

c1 = Quaternion( 3, -4, 5, -6 )
print( c1 )
print( -c1 )
print( abs( c1 ) )
print( bytes( c1 ) )

Opmerking

Het lijkt op het eerste gezicht handig om in de code hierboven ook de __int__(), __float__(), en __round__() methodes te implementeren, om respectievelijk de functies int(), float(), en round() toe te passen op self.a, self.b, self.c, en self.d. Helaas werkt dat niet, omdat de betreffende functies integers of floats moeten retourneren, en niet Quaternionen. Ik zie geen zinvolle interpretatie van int(), float(), en round() voor de class Quaternion, anders dan ik suggereerde, dus deze methodes moeten niet geïmplementeerd worden.