Python 自定义str和repr不工作

Python 自定义str和repr不工作,python,Python,我正在尝试转换输出,例如: decrypt : <torfuncs.TorHop instance at 0x7f44babb8440> 我试图打印出的是当前用于解密的跃点 编辑TorHop class TorHop: def __str__(self): return 'hop #' % self.hop def __repr__(self): return 'hop #' % self.hop def _

我正在尝试转换输出,例如:

decrypt : <torfuncs.TorHop instance at 0x7f44babb8440>
我试图打印出的是当前用于解密的跃点

编辑TorHop

class TorHop:

    def __str__(self):    
        return 'hop #' %  self.hop

    def __repr__(self):
        return 'hop #' %  self.hop

    def __init__(self, KH, Df, Db, Kf, Kb):
        self.KH = KH
        self.Df = Df
        self.Db = Db
        self.Kf = Kf
        self.Kb = Kb

        self.fwdSha = SHA.new()
        self.fwdSha.update(Df)
        self.bwdSha = SHA.new()
        self.bwdSha.update(Db)

        ctr = Counter.new(128,initial_value=0)
        self.fwdCipher = AES.new(Kf, AES.MODE_CTR, counter=ctr)
        ctr = Counter.new(128,initial_value=0)
        self.bwdCipher = AES.new(Kb, AES.MODE_CTR, counter=ctr)
    def encrypt(self, data):
        return self.fwdCipher.encrypt(data)
    def decrypt(self, data):
        return self.bwdCipher.decrypt(data)
有了这个,我现在得到:

AttributeError: TorHop instance has no attribute 'hops'

您似乎认为在
TorCircuit.decrypt()
类中使用
str(hop)
会转换为
self.\uuu str(hop)
。事实并非如此。它转换为
hop.\uu str\uuu()

换句话说,不要将这些方法放在
TorCircuit
类上,而是放在
TorHop
类上

当您将它们添加到
TorHop
时,请考虑到
\uuuu str\uuuu
\uuu repr\uuuu
不接受参数。删除
hop
参数
self
TorHop
实例:

def __str__(self):    
    return 'hop #%d' %  self.hop

def __repr__(self):
    return 'hop #%d' %  self.hop
我会将
\uuu repr\uuu
保留为对调试更有用的内容:

def __repr__(self):
    return '<TorHop(%d)>' % self.hop

这将打印
decrypt:hop#0
,然后
decrypt:hop#1
,等等,然后是
hop的结果。

您似乎认为在
TorCircuit.decrypt()
类中使用
str(hop)
。事实并非如此。它转换为
hop.\uu str\uuu()

换句话说,不要将这些方法放在
TorCircuit
类上,而是放在
TorHop
类上

当您将它们添加到
TorHop
时,请考虑到
\uuuu str\uuuu
\uuu repr\uuuu
不接受参数。删除
hop
参数
self
TorHop
实例:

def __str__(self):    
    return 'hop #%d' %  self.hop

def __repr__(self):
    return 'hop #%d' %  self.hop
我会将
\uuu repr\uuu
保留为对调试更有用的内容:

def __repr__(self):
    return '<TorHop(%d)>' % self.hop

这将打印
decrypt:hop#0
,然后
decrypt:hop#1
,等等,然后是
hop的结果。
str uuu()

在某一点上,您有
self.hop
而不是
self.hops
。另一个问题是,您正试图使用用于整数的
%d
,打印出看起来像列表的内容。这将失败。您需要将
\uu str\uuuuuu
\uuu repr\uuuu
定义添加到
TorHop
类中,而不是添加到
TorCircuit
类中。在某一点上,您有
self.hop
而不是
self.hops
。另一个问题是,您正试图使用用于整数的
%d
,打印出看起来像列表的内容。这将失败。您需要将
\uu str\uuuuuu
\uuuu repr\uuuu
定义添加到
TorHop
类,而不是添加到
TorCircuit
类中。@user3842234:您的
TorHop
类在哪里,添加到tor跃点后出现新错误class@user3842234:这是因为您的
TorHop
类没有
hop
hops
属性。是的,self.hops=[]在TorCircuit中。是否有任何方法从TorHop中获取数据?如果那样的话sense@user3842234:
\uuuu str\uuuu
只能使用
TorHop
对象本身上的属性。请为这些对象指定跃点编号,或在循环中添加编号,如图所示。@user3842234:your
TorHop
类在哪里?添加到上面,添加到tor跃点后出现新错误class@user3842234:这是因为您的
TorHop
类没有
hop
hops
属性。是的,self.hops=[]torHop中是否有任何方法可以从中获取数据?如果那样的话sense@user3842234:
\uuuu str\uuuu
只能使用
TorHop
对象本身上的属性。为这些对象指定跳数,或在循环中添加数字,如图所示。