How do I change the string representation of a Python class?
本问题已经有最佳答案,请猛点这里访问。
在爪哇中,我可以重写我的类的EDCOX1×0的方法。然后Java的打印函数打印其EDCOX1 OR 0定义的对象的字符串表示形式。是否有一个Python相当于Java的EDCOX1?0?
例如,我有一个PlayCard类。我有一张扑克牌的实例C。现在:
1 2 | >>> print(c) <__main__.Card object at 0x01FD5D30> |
但我想要的是:
1 2 | >>> print(c) A? |
如何自定义类实例的字符串表示形式?
我用的是python 3.x
最接近Java的EDCOX1(0)的等价物是为您的类实现EDCOX1(1)。将其放入类定义中:
1 2 | def __str__(self): return"foo" |
您还可能希望实现
有关详细信息,请参阅此处:
- 特殊方法名称-基本自定义
这并不像看起来那么简单,当只有str被覆盖时,一些核心库函数不能工作(用python 2.7检查),请参阅这个线程以获取示例如何使类JSON可序列化同样,试试这个
1 2 3 4 5 6 7 8 9 10 11 12 | import json class A(unicode): def __str__(self): return 'a' def __unicode__(self): return u'a' def __repr__(self): return 'a' a = A() json.dumps(a) |
生产
1 | '""' |
而不是
1 | '"a"' |
如预期的那样。
编辑:回答McHicago的评论:
Unicode没有任何属性——它是一个不可变的字符串,该字符串的值是隐藏的,在高级Python代码中不可用。
print b
生产
虽然
生产
因此,您可以看到一些本机库使用内部表示,这可能是出于性能原因。
有关更多详细信息,请参见:http://www.laurentluce.com/posts/python-string-objects-implementation/