Python 约定指示方法链是否是方法级联?

Python convention indicating whether method chaining is method cascading?

提问人:user2153235 提问时间:7/27/2023 最后编辑:user2153235 更新时间:8/12/2023 访问量:63

问:

我正在开发 Python 和 Spark。我注意到 Python 使用 大量方法和/或属性的链接。我发现的很多东西 Python 的在线描述描述了方法级联,即使 它称为方法链。根据维基百科链接返回一个对象,从中调用另一个方法。另一方面 hand,级联要求返回的对象是 “self”,所以它 是链接的子集。

有没有一种约定,可以快速识别何时 级联是专门用于而不是一般链接的?这里有两个例子 我从PySpark看到 教程

df = spark.readStream
        .format("kafka")
        .option("kafka.bootstrap.servers", "192.168.1.100:9092")
        .option("subscribe", "json_topic")
        .option("startingOffsets", "earliest") // From starting
        .load()

df.selectExpr("CAST(id AS STRING) AS key", "to_json(struct(*)) AS value")
   .writeStream
   .format("kafka")
   .outputMode("append")
   .option("kafka.bootstrap.servers", "192.168.1.100:9092")
   .option("topic", "josn_data_topic")
   .start()
   .awaitTermination()

它确实有助于加速代码的弄清楚,尤其是 当一个人不熟悉所讨论的类的生态系统时。在 级联,它只是对同一对象的方法的连续调用。 但是,级联的链式需要更加小心 破译,因为对象可能会在链中途发生变化。

Python 方法链接

评论

0赞 Chris 7/27/2023
在 Ruby 中你会发现比在 Python 中更多。
3赞 Barmar 7/27/2023
你所说的“级联”被称为“流畅的接口”。这在 Python 中并不常见。
3赞 Barmar 7/27/2023
一些库(如 Spark 和 SQLAlchemy)使用 Fluent 接口。没有简单的方法来识别它,你只需要知道库的风格是什么。
0赞 user2153235 7/27/2023
谢谢,巴马尔。你有足够的信心把它作为答案吗?就我而言,它回答了这个问题。我认为现在有办法识别级联太糟糕了。这种辨别力将加速对代码的理解。
3赞 deceze 7/27/2023
请参见 stackoverflow.com/a/11205638/476。你很少会在 Python 中找到“级联”,除非该库与常见的 Python 设计背道而驰。

答:

0赞 user2153235 7/30/2023 #1

这个答案是根据 Barmardeceze 的评论中提供的链接综合的。

方法级联在 Python 中很少见,因为 Guido van Rossum 建议(要求?)将库设计成方法不会因 self 突变而返回 self。

反过来,这样做的原因是为了避免混淆方法链的特定实例是否是方法级联,本质上是通过(在很大程度上)消除后者。

这是引用的来源。