我确信这是很好理解的,但即使是我看到的例子我也无法理解如何使用特定类中定义的函数。
我做的简单示例如下(创建一个函数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__
进行初始化。到目前为止,我认为它应该用于通过类传播变量值以供不同函数使用,但是我的使用中显然存在一些缺陷。
感谢您的帮助!
答案 0 :(得分:5)
您需要初始化TestPassingFunctions
类型的对象。这样做:
test = TestPassingFunctions(1)
test.add_two(2)
答案 1 :(得分:2)
您需要先生成该类的实例:
a = TestPassingFunctions(1)
print(a.add_two(2))
答案 2 :(得分:2)
如果您不想总是创建一个实例,可以将该函数设为classmethod
或staticmethod
(如果您希望类继承但不是专门用于保持状态,则非常有用(与每个实例关联的局部变量))
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
作为第一个参数