我在練習基本的python腳本時從網站上找到了下面的代碼。從下面的代碼中,我能夠理解類和實例以及第一個打印語句。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的參數顯式給出,因爲該方法不在實例上調用,而是在類上調用。而那個「自我」論證恰好是「polly」。 – Evert
有問題的代碼是Python 2特有的,第3條語句的行爲在Python 3中稍有改變;沒有要求使用Pet實例專門調用未綁定的方法。 –