0

私はPythonでクラスを正しく使用する方法を学ぼうとしています.私はそれにかなり慣れていませんが、このクラスにすべての値の文字列出力を返すことはできません. 理想的には、str(packet) をネットワーク ソケットに挿入できるようにしたいと考えています。

class ARP():
    dst_addr = ''
    src_addr = ''
    type = '\x08\x06'
    payload = '\x00\x01\x08\x00\x06\x04\x00'
    arptype = '\x01'
    src_mac_addr = ''
    src_ip_addr = ''
    dst_mac_addr = ''
    dst_ip_addr = ''

    def __repr_(self):
        return 'ARP'
    def __str__(self):
        return dst_addr + src_addr + type + payload + arptype \
            + src_mac_addr + src_ip_addr + dst_mac_addr + dst_ip_addr


p = ARP()
p.dst_addr = router_mac 
p.src_addr = random_mac()
p.arptype = '\x02'
p.src_mac_addr = local_mac
p.src_ip_addr = ip_s2n(target_ip)
p.dst_mac_addr = router_mac
p.dst_ip_addr = ip_s2n(router_ip)

print 'PACKET: ', str(p)
return str(p)

このコードは何も出力しません。repr()私が推測する出力<__main__.ARP instance at 0x2844ea8>は、それが何をするつもりですか?

4

1 に答える 1

3

__repr__メソッド名にアンダースコアがありません:

def __repr_(self):
# ---------^

Python は__repr__ではなくを探します__repr_

次に、__str__メソッドはself、グローバルではなく、 の属性を参照する必要があります。おそらくstr.join()ここでも電話が役立つでしょう:

def __str__(self):
    return ''.join([getattr(self, attr) for attr in (
        'dst_addr', 'src_addr', 'type', 'payload', 'arptype', 'src_mac_addr',
        'src_ip_addr', 'dst_mac_addr', 'dst_ip_addr')])
于 2014-05-10T15:14:00.940 に答える