将self参数传递给成员函数

时间:2017-05-04 22:43:08

标签: python

有人告诉我,我从不将自己的点参数(self.paramter)传递给成员方法。这就是我的意思:

class my_class:
    def __init__(self, parameter_one, parameter_two):
        self._parameter_one = parameter_one
        self._parameter_two = parameter_two
        self._result = None
        self.do_something(param1 = self._parameter_one, param2 = self._parameter_two)
    def do_something(self, param1, param2):
        self._result = param1 * param2
        print(self._result)

我拨打电话,确实有效:

>>> a = my_class(2, 5) 10

为什么这样做不好?它并不反对我所知道的任何PEP8。如果我按构造函数中传递的那些设置self.parameters(也许我在存入self之前已经对它们进行了一些处理)我不希望在传递给类方法之前再次处理。

1 个答案:

答案 0 :(得分:2)

通常,这是因为类方法已经可以访问您用来调用方法的对象。您为该方法提供了两种不同的路径来访问相同的数据,并且该别名在被调用方法的代码中并不明显。相反,你应该做这样的事情:         ...         self.do_something()

def do_something(self):
    self._result = self._parameter_one * self._parameter_two
    print(self._result)

你看到了区别吗?这样,您就可以清楚地知道您正在使用共生对象的属性(字段)来执行计算。你发布的方式并没有表明这一点。在更复杂的设计中,很容易错过param1直接来自给定的对象 - 并且会产生难以追踪的致命错误。< / p>