本博客讨论的是基于manim的但对于其它python程序其原理完全适用。观察这种表达DecimalNumber().set_color(WHITE).scale(5)它是连着写的那么问题来了可以再多连几个么可以交换次序写成DecimalNumber().scale(5).set_color(WHITE)这样么结论可以无限连着写顺序可以交换先 scale 再 set_color 完全没问题一、为什么能连着写链式调用在 Manim 中set_color()scale()move_to()shift()set_fill()set_stroke()这些方法执行完后都会返回对象自己return self所以你可以一直点 . 方法无限连numberDecimalNumber()\.set_color(WHITE)\.scale(5)\.set_fill(RED)\.set_stroke(BLUE)\.move_to(ORIGIN)完全合法二、顺序可以交换吗✅ ** 可以交换效果完全一样**# 写法1DecimalNumber().set_color(WHITE).scale(5)# 写法2交换顺序DecimalNumber().scale(5).set_color(WHITE)两个运行结果一模一样三、什么时候不能交换顺序只有位置、旋转、缩放这种几何变换交换顺序才会出问题。这时的交换语法没问题但效果不同就像加法与乘法的式子交换次序后仍能计算但结果不一样。例子不能交换会错位# 先右移2单位再右移1单位 → 最终在右3square.shift(RIGHT*2).shift(RIGHT*1)# 和这个不一样square.shift(RIGHT*1).shift(RIGHT*2)但上述set_color改颜色scale改大小一个管颜色一个管大小互不影响 → 随便换顺序四、再看一下例子p1[-1,-1,0]# 左下角p2[1,-1,0]# 右下角p3[1,1,0]# 右上角p4[-1,1,0]# 左上角aLine(p1,p2).append_points(Line(p2,p3).points).append_points(Line(p3,p4).points)链式调用原理因为Line()返回一条线对象.append_points()执行完也返回这条线所以可以Line().append_points().append_points()✅链式调用成立