位置参数和 self 关键字
Positional arguments and the self keyword
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())
您会注意到我在全名方法中省略了 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()
被传递了一个参数?
尝试将其定义为:
def fullname(self):
[...]
self
参数隐式传递给方法调用。它表示对调用方法的对象的引用。
考虑以下几点:
def fullname():
return '{} {}'.format(self.first, self.last)
上述方法中,变量self
在self.first
中指的是什么?当您键入 self
时,Python 如何知道您的意思?
所有方法都隐式传递其父对象作为第一个参数,就像 sys.argv[0]
始终是脚本名称一样。这样 self.first
之类的东西就可以工作了。
在 python 中,class 方法的第一个参数引用 class 的当前实例。例如,如果您使用 Employee class:
创建一个 emp 对象
emp = Employee('Rob', 'M')
self
将引用 emp。
所以你必须传递 self
作为 fullname
.
的参数
def fullname(self):
return '{} {}'.format(self.first, self.last)
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())
您会注意到我在全名方法中省略了 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()
被传递了一个参数?
尝试将其定义为:
def fullname(self):
[...]
self
参数隐式传递给方法调用。它表示对调用方法的对象的引用。
考虑以下几点:
def fullname():
return '{} {}'.format(self.first, self.last)
上述方法中,变量self
在self.first
中指的是什么?当您键入 self
时,Python 如何知道您的意思?
所有方法都隐式传递其父对象作为第一个参数,就像 sys.argv[0]
始终是脚本名称一样。这样 self.first
之类的东西就可以工作了。
在 python 中,class 方法的第一个参数引用 class 的当前实例。例如,如果您使用 Employee class:
创建一个 emp 对象emp = Employee('Rob', 'M')
self
将引用 emp。
所以你必须传递 self
作为 fullname
.
def fullname(self):
return '{} {}'.format(self.first, self.last)