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:yourTorHop
类在哪里?添加到上面,添加到tor跃点后出现新错误class@user3842234:这是因为您的TorHop
类没有hop
或hops
属性。是的,self.hops=[]torHop中是否有任何方法可以从中获取数据?如果那样的话sense@user3842234:\uuuu str\uuuu
只能使用TorHop
对象本身上的属性。为这些对象指定跳数,或在循环中添加数字,如图所示。