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"
我现在(或者我已经读过)在 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"