I'm using classes to design network conversations, I have this code:
class Conversation(object):
    __metaclass__ = ABCMeta
    def __init__(self, received=0, sent=0):
        self.sent = sent
        self.received = received
    def __str__(self):
        return "<Conversation: received=" + str(self.received) + " sent=" + str(self.sent) + " >"
    def __eq__(self, other):
        return isinstance(other, Conversation)
    @classmethod
    def filter(cls, pkt):
        return True
    @abstractmethod
    def is_sent(self, pkt):
        raise NotImplementedError
    def add(self, pkt):
        if self.is_sent(pkt):
            self.sent += 1
        else:
            self.received += 1
class IPConversation(Conversation):
    def __init__(self, a_ip, b_ip, received=0, sent=0):
        super(IPConversation, self).__init__(received, sent)
        self.a_ip = a_ip
        self.b_ip = b_ip
    def __str__(self):
        return "<IPConversation: " + self.a_ip + " >>> " + self.b_ip
    def __eq__(self, other):
        if super(IPConversation, self).__eq__(other):
            a = (self.a_ip, self.b_ip)
            b = (other.ip_a, other.ip_b)
            return a == b or a == b[::-1]
        return False
    @classmethod
    def filter(cls, pkt):
        return super(IPConversation, cls).filter(pkt) and 'IP' in pkt
    def is_sent(self, pkt):
        return self.a_ip == pkt['IP'].src
but then I thought about creating the IPv6 class, and it will be the same as the IP class but the only difference is the 'IPv6' in pkt in front of 'IP' in the classmethod. how can I do it with a metaclass?