python def 方法应该有"self"作为第一个参数



我正在通过付费在线课程学习python,在学习模块和包时,我输入了以下代码,出现了错误。

class Fibonacci:
def __init__(self, title="fibonacci"):
self.title = title
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
def fib2(n):
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a + b
return result

并且def示出了类似于"0"的错误;def方法应该具有";自我;作为第一论点";。你知道我为什么会出错吗?我认为我的代码应该是好的,当我试着通过我朋友的笔记本电脑(窗口(运行它时,它运行得很好,顺便说一句,我使用的是macos。对不起,我只是python的新手..:(点击此处查看错误

-----编辑-----------------谢谢你的评论!我已经像图片编辑的代码一样编辑了,它没有错误!:(

但当我尝试调用该函数时,出现了一个错误,如TypeError:fib((缺少1个必需的位置参数:"n">

from pkg.fibonacci import Fibonacci
Fibonacci.fib(100)

查看错误消息错误消息2

这是因为如果要将函数绑定到类,则类中的所有函数都必须具有名为self的参数。

self表示类的实例。通过使用self关键字,我们可以访问python中类的属性和方法。它将属性与给定的参数绑定

试试这个

class Fibonacci:
def __init__(self, title="fibonacci"):
self.title = title
def fib(self,n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
def fib2(self,n):
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a + b
return result

在Python类中引用Self

编辑:

回答您的其他问题

调用类函数时应使用对象。因此,在调用函数之前,必须定义一个对象。

像这个

from pkg.fibonacci import Fibonacci
f = Fibonacci()
f.fib(100)

不确定fib/fib2是否是类方法。

如果是,您可以将self添加到对象参数中,作为

def fib(self, n)

然后你可以调用这样的方法:

f = Fibonacci()
f.fib(5)

self参数是指类对象,因此您可以在类方法中使用self属性,在您的情况下,您可能有

def fib(self, n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
print(self.title)

这更可能是一个警告而不是错误。警告是说,您正在将一个方法声明为类的一部分,但它并没有真正绑定到任何对象(缺少self(。如果你是故意这么做的,那就意味着你应该使用静态方法。

因此,您可以像另一个答案中建议的那样,继续将self添加到这两个函数中,也可以使用静态方法

class Fibonacci:
def __init__(self, title="fibonacci"):
self.title = title
@staticmethod
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
@staticmethod
def fib2(n):
result = []
a, b = 0, 1
while a < n:
result.append(a)
a, b = b, a + b
return result

你会称之为Fibonacci.fib(your_num_here)

最新更新