python def 方法应该有 "self" 作为第一个参数
python def Method should have "self" as first argument
我正在通过付费在线课程学习 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 显示错误,例如“def 方法应该将“self”作为第一个参数”。
你知道我为什么会出错吗?我认为我的代码应该没问题,当我尝试 运行 它通过我的朋友笔记本电脑 (window) 时它运行良好顺便说一句,我正在使用 mac os。
抱歉,我刚接触 python .. :) click to see the error here
----- 已编辑 ------------------
感谢您的评论!而且我已经像图片edited code一样编辑了,没有错误! :)
但是当我尝试调用该函数时,出现类似 TypeError: fib() missing 1 required positional argument: 'n'
的错误
from pkg.fibonacci import Fibonacci
Fibonacci.fib(100)
查看 error message
error message2
这是因为 class 中的所有函数必须有一个名为 self
的参数,如果你想将函数绑定到 class。
self
represents the instance of the class. By using the self
keyword we can access the attributes and methods of the class in python. It binds the attributes with the given arguments
试试这个
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
编辑:
回答你的另一个问题
调用 class 函数时应使用对象。所以你必须在调用函数之前定义一个对象。
像这样
from pkg.fibonacci import Fibonacci
f = Fibonacci()
f.fib(100)
这更有可能是警告而不是错误。
并且警告说您正在将方法声明为 class 的一部分,但它并未真正绑定到任何对象(缺少自身)。如果你是故意这样做的,那就意味着你应该使用静态方法。
所以您可以继续将 self
添加到其他答案中建议的这两个函数,或者您可以使用 static methods
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)
不确定 fib / fib2 是否是 class 方法。
如果是,你可以在object参数中加上self,如
def fib(self, n)
然后你可以这样调用方法:
f = Fibonacci()
f.fib(5)
self 参数指的是 class 对象,所以你可以在 class 方法中使用 self 属性,在你的情况下,你可能有
def fib(self, n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
print(self.title)
我正在通过付费在线课程学习 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 显示错误,例如“def 方法应该将“self”作为第一个参数”。 你知道我为什么会出错吗?我认为我的代码应该没问题,当我尝试 运行 它通过我的朋友笔记本电脑 (window) 时它运行良好顺便说一句,我正在使用 mac os。 抱歉,我刚接触 python .. :) click to see the error here
----- 已编辑 ------------------ 感谢您的评论!而且我已经像图片edited code一样编辑了,没有错误! :)
但是当我尝试调用该函数时,出现类似 TypeError: fib() missing 1 required positional argument: 'n'
的错误from pkg.fibonacci import Fibonacci
Fibonacci.fib(100)
查看 error message error message2
这是因为 class 中的所有函数必须有一个名为 self
的参数,如果你想将函数绑定到 class。
self
represents the instance of the class. By using theself
keyword we can access the attributes and methods of the class in python. It binds the attributes with the given arguments
试试这个
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
编辑:
回答你的另一个问题
调用 class 函数时应使用对象。所以你必须在调用函数之前定义一个对象。
像这样
from pkg.fibonacci import Fibonacci
f = Fibonacci()
f.fib(100)
这更有可能是警告而不是错误。 并且警告说您正在将方法声明为 class 的一部分,但它并未真正绑定到任何对象(缺少自身)。如果你是故意这样做的,那就意味着你应该使用静态方法。
所以您可以继续将 self
添加到其他答案中建议的这两个函数,或者您可以使用 static methods
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)
不确定 fib / fib2 是否是 class 方法。
如果是,你可以在object参数中加上self,如
def fib(self, n)
然后你可以这样调用方法:
f = Fibonacci()
f.fib(5)
self 参数指的是 class 对象,所以你可以在 class 方法中使用 self 属性,在你的情况下,你可能有
def fib(self, n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
print(self.title)