我正在使用具有相当多参数和方法的类的python项目。为了降低复杂性,我一直在编写这样的方法:
def foo(self):
return self.parameter1 * self.parameter2
明确传递参数会更好吗?
def foo(self, parameter1, parameter2):
return parameter1 * parameter2
这是因为我发现很难在不测试整个类的情况下测试类中的函数。
答案 0 :(得分:1)
为了降低复杂性,我一直在编写这样的方法
假设这个目的是错误的,如果定义实例方法,则应该使用self(实例变量)。
根据pylint: method_could_be_a_function:如果一个函数可以在没有self(实例变量)的情况下运行,它应该是一个单独的函数,而不是一个实例方法。
例如:
class A(object):
def __init__(self):
self.some_instance_var
def some_instance_method(self):
#code here is suggested to be related to self(instance variable), eg:
return self.some_instance_var
将这个作为实例方法放入类中是合适的。
class A(object):
...
def foo(self):
return self.parameter1 * self.parameter2
这个应该是正常的函数,而不是实例方法。因为函数的内容与self(实例变量)无关。
def foo(self, parameter1, parameter2):
return parameter1 * parameter2
答案 1 :(得分:1)
您的问题会做出一些与OO设计不一致的假设。
如果parameter1
和parameter2
不是由self
表示的对象的内在属性,则需要传递它们。但是,如果它们 是<{1}}的内在属性,那么它们应该已经与self
相关联,并且不需要传递。
OO设计的一个主要观点,以及一般的对象,是将描述对象的数据和方法明确地关联在一起处理对象。
<强>答案:强>
对对象固有的任何内容使用self
引用,并将那些不是的值作为参数传递。