Python3類方法報錯takes 0 positional arguments but 1 was given

Roman-H發表於2019-08-07

問題:在學習Python物件導向時,程式報錯takes 0 positional arguments but 1 was given

首先,定義了一個類如下:

#定義一個類
class cat:
	#屬性

	#方法
	def eat():
		print("貓可以吃。")
	def catch():
		print("貓可以抓老鼠")
#建立一個物件
tom=cat()
#呼叫tom指向物件中的方法
tom.catch()

執行時發現程式報錯:catch() takes 0 positional arguments but 1 was given
意思是catch()這個方法並沒有位置引數,卻被傳進了一個位置引數。
  經查閱發現:Python在類中定義方法的時候,方法會被傳進一個引數,即當前物件的地址,所以一般在類中定義方法的時候,必須在方法中至少定義一個引數。一般情況下我們將其命名為"self",但是例項方法的第一個引數不一定要叫self,其實完全可以叫任意引數名,比如:a,b,c等等,只是約定俗成的把該引數命名為self,因為這樣使程式碼具有更好的可讀性。

修改後的程式碼:

#定義一個類
class cat:
	#屬性
	#方法
	def eat(lf):
		print("貓可以吃。")
	def catch(elf):
		print("貓可以抓老鼠")
#建立一個物件
tom=cat()
#呼叫tom指向物件中的方法
tom.catch()

注:相關資料:

  1. 原文:在類中定義的方法預設是例項方法,定義例項方法的方法與定義定義函式的方法基本相同,只是例項方法的第一個引數會被繫結到方法的呼叫者(該類的例項)———因此例項方法至少應該定義一個引數,該引數通常會被命名為self。                  ————出自《瘋狂Python講義》

2)在這裡插入圖片g述
      ————出自菜鳥教https://www.runoob.com/python/python-object.html

相關文章