Python中的字符串对象

Python中的字符串对象

我有一些数据对象,我想在其中实现一个字符串和等于深入的函数。

我实施了 str  eq ,虽然平等工作正常但我无法使 str 的行为方式相同:

class Bean(object):

    def __init__(self, attr1, attr2):
        self.attr1 = attr1
        self.attr2 = attr2

    def __str__(self):
        return str(self.__dict__)

    def __eq__(self, other):
        return self.__dict__ == other.__dict__

当我跑步时:

t1 = Bean("bean 1", [Bean("bean 1.1", "same"), Bean("bean 1.2", 42)])
t2 = Bean("bean 1", [Bean("bean 1.1", "same"), Bean("bean 1.2", 42)])
t3 = Bean("bean 1", [Bean("bean 1.1", "different"), Bean("bean 1.2", 42)])

print(t1)
print(t2)
print(t3)
print(t1 == t2)
print(t1 == t3)

我明白了:

{'attr2': [<__main__.Bean object at 0x7fc092030f28>, <__main__.Bean object at 0x7fc092030f60>], 'attr1': 'bean 1'}
{'attr2': [<__main__.Bean object at 0x7fc091faa588>, <__main__.Bean object at 0x7fc092045128>], 'attr1': 'bean 1'}
{'attr2': [<__main__.Bean object at 0x7fc0920355c0>, <__main__.Bean object at 0x7fc092035668>], 'attr1': 'bean 1'}
True
False

因为t1和t2包含相同的值,所以equals返回true(如预期的那样),而由于t3在列表中包含不同的值,结果为false(也是预期的)。 我想要的是对于字符串具有相同的行为(基本上也深入到列表中的元素(或set或dict ...)。

对于print(t1)我想得到类似的东西:

{'attr2': ["{'attr2': 'same', 'attr1': 'bean 1.1'}", "{'attr2': 42, 'attr1': 'bean 1.2'}"], 'attr1': 'bean 1'}

如果我这样做,实际上是获得的:

Bean("bean 1", [Bean("bean 1.1", "same").__str__(), Bean("bean 1.2", 42).__str__()]).__str__

由于我不知道属性attr1的类型,我的Bean对象中的attr2(它们可能是列表,但也有集合,字典等)是一个简单而优雅的解决方案,不需要类型检查...

这可能吗?

最佳答案:

2 个答案:

答案 0 :(得分:22)

你可以使用__repr__而不是__str__,这是递归工作的,虽然这在大多数时候都不是一个好主意(请查看this答案以获取更多详细信息)。不过,这对我有用:

def __repr__(self):
    return str(self.__dict__)

答案 1 :(得分:1)

您可以尝试使用 repr 代替 str 

当使用def repr (self)时,我得到了以下打印输出(t1):而不是str。

{'attr1':'bean 1','attr2':[{'attr1':'bean 1.1','attr2':'same'},{'attr1':'bean 1.2', 'attr2':42}]}

如果这可以解决您的问题,请告诉我。附上image以供参考。

此致 Vinith

Tags:python python-3.x ToString 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值