【发布时间】:2018-12-12 07:19:36
【问题描述】:
class Employee:
def __init__(self, first, last):
self.first = first
self.last = last
def fullname():
return '{} {}'.format(self.first, self.last)
emp = Employee('Rob', 'M')
print (emp.fullname())
你会注意到我在 fullname 方法中遗漏了 self 关键字,所以我得到:
TypeError: fullname() takes 0 positional arguments but 1 was given
这实际上是一个参数错误吗?我的猜测是否定的,所以我尝试了:
class Employee:
def __init__(foo, first, last):
foo.first = first
foo.last = last
def fullname():
return '{} {}'.format(self.first, self.last)
emp = Employee('rob', 'm')
print(emp.fullname())
还有一些其他的事情,例如在fullname() 中将 self 排除在 return 语句之外。但是,每种更改方法都表示错误是TypeError。所以我很困惑,为什么fullname() 被传递了一个参数?
【问题讨论】:
-
你忘记了
self。 (此外,在发布代码时,请确保它与您实际运行的内容完全匹配,包括缩进。您可以通过将代码复制粘贴到问题框中来做到这一点,选择您粘贴的所有内容(包括预览中看起来不错的部分) ,然后按 Ctrl-K。) -
在您发布的表单中,您的代码包含几个缩进错误,这些错误会导致与您报告的错误不同。
-
重要的是要意识到
self不是 Python 中的关键字。唯一的约定是将方法的第一个参数命名为self。如果您愿意,您可以使用不同的名称(尽管您通常不应该这样做,因为这会使您的代码对其他程序员更加困惑)。
标签: python python-3.x python-object