-
-
Notifications
You must be signed in to change notification settings - Fork 42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feature: Partially setting the honor_existing option #102
Comments
这里是无限递归么?看起来每个path都有一个不同的parent啊。有若干种方式解决这个问题,formatter是个挺clean的方案,把parent给exclude掉也可以。你设想的使用方式是什么呢?在op这个函数下的honor_exist必然是对所有object生效的,如果你想config它就需要一个基本同样复杂的filter。还有一个方案是直接在Struct上add_objprint,应该会覆盖它的str |
使用 formatter 确实已经很简便了,但是这是一个全局的配置,如果其它地方有另外的设置的话可能会打架,而 honor_exist 是一次性的,没有什么副作用;exclude 的问题是如果刚好有另一个也叫 parent 的字段的话就没法操作了;add_objprint 的话,因为只是使用 objprint 来作为 debug 的工具,并不能将 objprint 嵌入项目代码中,而且对于众多的 dataclass 这样也不是很方便。 我的想法是,对于大部分情况来说,在同一次打印中,对于相同的类型,使用的打印策略应该是相同的,所以我想到的方案 1 和 2,如果要极致的自定义的话可能可以使用方案 3:
|
这几个方案都不理想, |
如果是一次性的formatter的话,可不可以在objprint() 里加一个argument,类似于这种: |
我不确定这是不是个普遍的场景,还是算作特殊的需求。如下面的代码所示,我想用 objprint 来打印 Struct 类型的变量。但是因为 dataclass 已经有了 __str__ 的实现,我只能把 honor_existing 参数设为 False。可是这样 pathlib.Path 中 parent 属性会让 objprint 在输出时陷入无限递归,直到 depth。然而实际上我不需要对 pathlib.Path 的 honor_existing 设为 False。
我当前是通过加上自定义的 Formatter 实现上面的需求
The text was updated successfully, but these errors were encountered: