mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 23:21:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable file
		
	
	
	
	
#!/usr/bin/env python3
 | 
						|
 | 
						|
"""
 | 
						|
A demonstration of classes and their special methods in Python.
 | 
						|
"""
 | 
						|
 | 
						|
class Vec:
 | 
						|
    """A simple vector class.
 | 
						|
 | 
						|
    Instances of the Vec class can be constructed from numbers
 | 
						|
 | 
						|
    >>> a = Vec(1, 2, 3)
 | 
						|
    >>> b = Vec(3, 2, 1)
 | 
						|
 | 
						|
    added
 | 
						|
    >>> a + b
 | 
						|
    Vec(4, 4, 4)
 | 
						|
 | 
						|
    subtracted
 | 
						|
    >>> a - b
 | 
						|
    Vec(-2, 0, 2)
 | 
						|
 | 
						|
    and multiplied by a scalar on the left
 | 
						|
    >>> 3.0 * a
 | 
						|
    Vec(3.0, 6.0, 9.0)
 | 
						|
 | 
						|
    or on the right
 | 
						|
    >>> a * 3.0
 | 
						|
    Vec(3.0, 6.0, 9.0)
 | 
						|
    """
 | 
						|
    def __init__(self, *v):
 | 
						|
        self.v = list(v)
 | 
						|
 | 
						|
    @classmethod
 | 
						|
    def fromlist(cls, v):
 | 
						|
        if not isinstance(v, list):
 | 
						|
            raise TypeError
 | 
						|
        inst = cls()
 | 
						|
        inst.v = v
 | 
						|
        return inst
 | 
						|
 | 
						|
    def __repr__(self):
 | 
						|
        args = ', '.join(repr(x) for x in self.v)
 | 
						|
        return 'Vec({})'.format(args)
 | 
						|
 | 
						|
    def __len__(self):
 | 
						|
        return len(self.v)
 | 
						|
 | 
						|
    def __getitem__(self, i):
 | 
						|
        return self.v[i]
 | 
						|
 | 
						|
    def __add__(self, other):
 | 
						|
        # Element-wise addition
 | 
						|
        v = [x + y for x, y in zip(self.v, other.v)]
 | 
						|
        return Vec.fromlist(v)
 | 
						|
 | 
						|
    def __sub__(self, other):
 | 
						|
        # Element-wise subtraction
 | 
						|
        v = [x - y for x, y in zip(self.v, other.v)]
 | 
						|
        return Vec.fromlist(v)
 | 
						|
 | 
						|
    def __mul__(self, scalar):
 | 
						|
        # Multiply by scalar
 | 
						|
        v = [x * scalar for x in self.v]
 | 
						|
        return Vec.fromlist(v)
 | 
						|
 | 
						|
    __rmul__ = __mul__
 | 
						|
 | 
						|
 | 
						|
def test():
 | 
						|
    import doctest
 | 
						|
    doctest.testmod()
 | 
						|
 | 
						|
test()
 |