Fluent Python

序列的修改、散列、切片

2018-03-20  本文已影响17人  一块大番薯

Vector

from array import array
import reprlib
import math

class Vector:
    typecode = 'd'
    
    def __init__(self, components):
        self._components = array(self.typecode, components)
        
    def __iter__(self):
        return iter(self._components)
        
    def __repr__(self):
        components = reprlib.repr(self._components)
        components = components[components.find('['):-1]
        return 'Vector({})'.format(components)
        
    def __str__(self):
        return str(tuple(self._components))
        
    def __bytes__(self):
        return bytes([ord(self.typecode)]) + bytes(self._components)
        
    def __eq__(self, other):
        return tuple(self) == tuple(other)
        
    def __abs__(self):
        return math.sqrt(sum(x * x for x in self))
        
    def __bool__(self):
        return bool(abs(self))
        
    @classmethod
    def frombytes(cls, octets):
        typecode = chr(octets[0])
        memv = memoryview(octets[1:]).cast(typecode)
        return cls(memv)
测试
reprlib 作用
上一篇下一篇

猜你喜欢

热点阅读