【发布时间】:2016-02-13 07:31:45
【问题描述】:
我在练习基本的 Python 脚本时从网站上找到了以下代码。从下面的代码中,我能够理解类和实例以及第一个打印语句。
但我不明白第二个和第三个打印语句背后使用的概念。如何将实例(在下面的代码polly 中)作为参数传递给类的方法? python中是否有任何选项可以让我们这样传递?
class Pet(object):
def __init__(self, name, species):
self.name = name
self.species = species
def getName(self):
return self.name
def getSpecies(self):
return self.species
def __str__(self):
return "%s is a %s" % (self.name, self.species)
polly = Pet("Polly", "Parrot")
print "Polly is a %s" % polly.getSpecies()
Polly is a Parrot
print "Polly is a %s" % Pet.getSpecies(polly)
Polly is a Parrot
print "Polly is a %s" % Pet.getSpecies()
Traceback (most recent call last):
File "", line 1, in
TypeError: unbound method getSpecies() must be called with Pet instance as first argument (got nothing instead)
【问题讨论】:
-
很短:看看
self。在第一种情况下,self作为第一个参数隐式发送到getSpecies,因为在实例上调用了getSpecies。self在这种情况下是Pet的一个实例,即polly。在第二种情况下,self显式作为getSpecies的参数给出,因为该方法不是在实例上调用,而是在类上调用。而self参数恰好是polly。 -
有问题的代码是 Python 2 特定的,Python 3 中第三条语句的行为略有改变;不要求使用 Pet 实例专门调用未绑定的方法。
标签: python pass-by-reference python-2.x