Python 3:我们可以避免在调用其几个方法时重复实例名称吗?

时间:2016-02-15 11:14:45

标签: python vba attributes instance-variables

我现在(或者我已经读过)在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 WithNext行,但我想集中讨论。我决定学习Python的主要原因之一是因为它被称为非常整洁并且与程序“类似”。真的不可能这样做吗?

2 个答案:

答案 0 :(得分:3)

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

def penup(self):
    # Your logic
    return self

答案 1 :(得分:0)

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

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

现在,函数forward仅适用于one_turtle,简单示例

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