类:函数在同一个类中使用

时间:2017-11-27 17:20:38

标签: python class

我确信这是很好理解的,但即使是我看到的例子我也无法理解如何使用特定类中定义的函数。

我做的简单示例如下(创建一个函数add_one,它将给定输入数字加1,然后在另一个函数add_two中使用该函数):

class TestPassingFunctions: 
    def __init__(self, number): 
        self.number = number

    def add_one(self, number):
        return number + 1

    def add_two(self, number):
        new_value = self.add_one(number) + 1
        return new_value

TestPassingFunctions.add_two(2)

返回:

TypeError: add_two() missing 1 required positional argument: 'number'

从我读过的内容来看,该课程正在将2解释为self参数。很明显,我不完全理解何时/如何使用__init__进行初始化。到目前为止,我认为它应该用于通过类传播变量值以供不同函数使用,但是我的使用中显然存在一些缺陷。

感谢您的帮助!

4 个答案:

答案 0 :(得分:5)

您需要初始化TestPassingFunctions类型的对象。这样做:

test = TestPassingFunctions(1)
test.add_two(2)

答案 1 :(得分:2)

您需要先生成该类的实例:

a = TestPassingFunctions(1)
print(a.add_two(2))

答案 2 :(得分:2)

如果您不想总是创建一个实例,可以将该函数设为classmethodstaticmethod(如果您希望类继承但不是专门用于保持状态,则非常有用(与每个实例关联的局部变量))

class TestPassingFunctions: 

    @staticmethod #doesn't need anything else from the class
    def add_one(number):
        return number + 1

    @classmethod #may need to refer to the class (in this case to access cls.add_one)
    def add_two(cls, number):
        new_value = cls.add_one(number) + 1
        return new_value

TestPassingFunctions.add_two(2) #returns 4

Here's您可以使用的不同类型方法的快速指南

答案 3 :(得分:1)

您正在混合类方法,静态方法和类的常规方法的内容。

这些方法被定义为常规方法,具有您的类的实例:

test = TestPassingFunctions(1)
test.add_two

如果你想在没有实例的情况下调用它们,比如TestPassingFunctions.add_two(2),你应该将它们定义为静态或类方法,装饰器@staticmethod并且没有self作为第一个参数