【发布时间】:2015-10-02 14:58:59
【问题描述】:
厌倦了为我的类手动实现字符串表示,我想知道是否有一种 Python 的方法可以自动执行此操作。
我想要一个涵盖类的所有属性和类名的输出。这是一个例子:
class Foo(object):
attribute_1 = None
attribute_2 = None
def __init__(self, value_1, value_2):
self.attribute_1 = value_1
self.attribute_2 = value_2
导致:
bar = Foo("baz", "ping")
print(str(bar)) # desired: Foo(attribute_1=baz, attribute_2=ping)
在一些 Java 项目中使用 Project Lombok @ToString 后想到这个问题。
【问题讨论】:
-
Project Lombok 为 Java 做了什么?
-
样板代码缩减。在此处查找功能:projectlombok.org/features/index.html
-
其实,“样板代码缩减”没有任何意义。 Lombok 处理特定的 Java 问题。搜索“类似”的工具是没有用的,最好问更具体的。
-
Python 有默认实现
__str__,转发到__repr__。__repr__也有一个默认实现,它提到了type(my_object)和id(my_object)的结果。如果您想使用其他默认值,您可以 a) 使用继承,b) 编写自己的类装饰器,或 c) 将类主体中的__str__分配给某个现有函数(通过执行__str__ = something而不是def __str__(self))。
标签: python boilerplate