Python 3:在调用它的几个方法时是否可以避免重复同一个实例名?

Python 3: Can we avoid repeating an instance name when calling several of its methods?

我现在(或者我已经读过)在 Python 2.x 中是不可能的,并且在 Python 3 中也找不到它,但也许我不知道不知道如何搜索它... 用一个简单的 Python 例子更容易解释:

for i in range(11):
    one_turtle.penup()
    one_turtle.forward(50)
    one_turtle.down()
    one_turtle.forward(8)
    one_turtle.up()
    one_turtle.forward(8)
    one_turtle.stamp()
    one_turtle.forward(-66)
    one_turtle.left(360/12)

我想避免以与您在 VBA 中相同的方式重复 "one_turtle",这将导致类似于此的结果:

For i = 1 To 11
    With one_turtle.penup()
        .forward(50)
        .down()
        .forward(8)
        .up()
        .forward(8)
        .stamp()
        .forward(-66)
        .left(360/12)

With 关键字生成的代码更清晰,更易于编写和阅读(它需要一个 End With 和一个 Next 行,但我想集中讨论)。我决定学习 Python 的主要原因之一是据说它非常简洁并且 "zen-like" 可以编程。这真的不可能吗?

在您对所有这些成员方法的定义中,只需 return self.
例如。像这样更改 penup() 的定义:

def penup(self):
    # Your logic
    return self

理想的解决方案是我认为已经发布,返回 self 是最干净的方法。但是,如果您无法编辑海龟对象或其他任何东西,您可以创建一个别名:

forward = one_turtle.forward
... some code ...
forward()

现在forward函数只适用于one_turtle,简单的例子

s = "abc"
x = s.upper
print(x()) # prints "ABC"