python - 類 對(duì)象 函數(shù)后面的參數(shù)問(wèn)題,勉強(qiáng)看懂但是要自己寫(xiě)出來(lái)就感覺(jué)很困難
問(wèn)題描述
class Ball: def setName(self,name):self.name=name def kick(self):print(’我是%s,該死的,誰(shuí)踢我...’%self.name)a=Ball()a.setName(’球A’)b=Ball()b.setName(’球B’)c=Ball()c.setName(’球C’)a.kick()c.kick()我是球A,該死的,誰(shuí)踢我...我是球C,該死的,誰(shuí)踢我...
a.setName()函數(shù)定義的時(shí)候有兩個(gè)參數(shù)self,name。a.setName(’球A’)后面又只有一個(gè)了,那是表示self=‘球A’嗎,那第二個(gè)函數(shù)kick里的語(yǔ)句sefl.name又作如何解釋呢?
class Ball:
def _init_(self,name): self.name=namedef kick(self): print(’我是%s,該死的,誰(shuí)踢我...’%self.name)
b=Ball(’土豆’)b.kick()c-Ball()? ? b=Ball(’土豆’)TypeError: object() takes no parameters
前后對(duì)比,詳解區(qū)別及代碼矯正。
問(wèn)題解答
回答1:Python 類的函數(shù)就是這么寫(xiě)得,是 a.setName(’球A’) 是 name=’球A’。
回答2:self是動(dòng)態(tài)的,每次創(chuàng)建一個(gè)實(shí)例,它就代表這個(gè)實(shí)例本身,就像 Java 里的this。在 Python 里的語(yǔ)法就是這樣,類方法定義的時(shí)候需要顯式定義self,但是在調(diào)用的時(shí)候 Python 自動(dòng)隱式幫你傳入了 self 參數(shù)。
在 Python里 真正的實(shí)例化方法是__new__,__init__只是完成了參數(shù)的初始化,然后交給__new__實(shí)例化,所以 b = Ball(’土豆’) 這個(gè)調(diào)用傳參格式要和__init__一致。
