像java中的python方法链接?

2024-05-13 09:21:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我隐约记得我在Minecraft moding的日子里,在java中,可以在一行中设置多个类变量,如下所示:

SomeBlock.hardness(0.5).isOpaque(True).blastResistance(2).etc.etc

我想知道在python中是否有类似的方法。但是我在第一个类中尝试了修改,而不是第一个类。在

有办法吗?在


Tags: 方法trueetcjavaminecraft办法日子hardness
3条回答

the second one ends up thinking it is supposed to modify the return of the first one instead of the original class。是的,这是正常的Python语法。返回self不会创建特殊语法。它只是确保返回的对象是正确的链接对象。在

您的初始化任务通常编码为

class SomeBlock():
    def __init__(self, hardness=None, opaque=False, blastResistance=None):
        self.hardness = hardness
        self.opaque = opaque
        self.blastResistance = blastResistance

ablock = SomeBlock(hardness=0.5, opaque=True, blastResistance=2)

而且由于Python不需要访问属性的方法,所以您还可以编写

^{pr2}$

因此,如果一个方法确实返回self,则通常实现一个比设置属性更复杂的方法。在

更常见的是让方法返回同一类的新对象。例如,这是许多numpy数组方法中的典型方法。A.dot(B)返回新数组,即取AB的点积的结果。A.dot(B).dot(C)看起来像链接,但只是对连续数组的一系列操作。在

是的,您可以这样做,事实上,它的实现方式与在Java中相同:通过返回self引用。在

class SomeBlock(object):
    def hardness(self, blah):
        self.hardness = blah
        return self
    def isOpaque(self, value):
        self.isOpaque = value
        return self

a = SomeBlock()
a.hardness(0.5).isOpaque(true)

这只是一个流畅的界面,设计成这样。它主要是通过返回相同的对象来创建的:

class Test:
  def setX(self, x):
    self.x = x
    return self

  def setY(self, x):
    self.y = y
    return self


 t = Test()
 t.setX(12).setY(11)

相关问题 更多 >