面向对象编程中的 Python 参数传递

tha*_*itz 5 python oop arguments

如果有人在其他地方问过这个问题,我深表歉意,但我不知道如何提出这个问题。

我是一名物理学家,Python 是我的第一个面向对象语言。我喜欢这种语言,因为它的代码很干净,不知何故,一切都按预期工作(由我 ;)。

但是我有一个问题,也许它更像是一种设计选择,但是由于我的面向对象编程是自学的并且非常基础,我不确定该走哪条路。

所以问题是:我应该主要传递参数还是直接操作对象数据?因为,例如:

class test(object):

    ...

    def dosomething(self, x, y):
        # do someting with x, y involving a lot of mathematic manipulations

    def calcit(self):
        k = self.dosomething(self.x[i], self.y[i])
        # do something else with k
Run Code Online (Sandbox Code Playgroud)

生成的代码比不传递x, y而是每次显式传递i和编写要干净得多self。你更喜欢什么,或者这是我打破的面向对象范式?

在性能方面,这应该没有区别,因为参数是通过引用传递的,对吗?

m09*_*m09 2

对象范例是:将方法和属性打包在一起,并将它们称为对象。

因此,如果您精确地操作这些属性之一,则不需要将它们作为参数传递,您应该使用对象的属性。如果您使用其他任何东西,那么您必须将其作为参数传递。

如果每次都麻烦你写 self ,那么没有什么可以阻止你将对象的值放入另一个变量中!

最后,如果您真的想做类似的事情,那么以 x 和 y 作为参数的函数不应该在您的对象中,而应该在它的外部作为辅助函数,原因是没有理由将您的对象作为第一个参数传递(即使它是隐式的)如果您不使用它。

是的,就性能而言,它应该非常相似!