Python:将self传递给类方法或参数

时间:2017-01-13 06:35:23

标签: python oop

我正在使用具有相当多参数和方法的类的python项目。为了降低复杂性,我一直在编写这样的方法:

def foo(self):
    return self.parameter1 * self.parameter2

明确传递参数会更好吗?

def foo(self, parameter1, parameter2):
    return parameter1 * parameter2

这是因为我发现很难在不测试整个类的情况下测试类中的函数。

2 个答案:

答案 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设计不一致的假设。

如果parameter1parameter2 不是self表示的对象的内在属性,则需要传递它们。但是,如果它们 是<{1}}的内在属性,那么它们应该已经与self相关联,并且不需要传递。

OO设计的一个主要观点,以及一般的对象,是将描述对象的数据和方法明确地关联在一起处理对象。

<强>答案:

对对象固有的任何内容使用self引用,并将那些不是的值作为参数传递。