Book.No_Pages() missing 2 required positional arguments: 'Words' and 'Font_size'
錯誤出現在第 14 行代碼是:-
class Book():
def __init__ (b1,Font_size=12,Words=300):
b1.Words = Words
pass
b1.Font_size = Font_size
pass
def No_Pages(b1,Words,Font_size):
return b1.Words/b1.Font_size
cyn_Book = Book(300,12)
print(cyn_Book.Font_size)
print(cyn_Book.Words)
print(cyn_Book.No_Pages())
我實際上通過另一種方法嘗試了這一點,例如在 and 之后添加 passFont_size
并Words
認為它可以回傳words 300
,Font_size 12
并且pages
被15
uj5u.com熱心網友回復:
所以No_pages
不使用這些引數 (Words
和Font_size
) - 它是從b1
引數中獲取它們的(通常稱為self
,順便說一句。)本質上,你將整個容器交給它b1
,并且它從那里獲取它需要的一切 - 但你'我們還告訴它應該顯式地傳遞Words
and Font_size
,它不需要。因為你沒有通過它們,所以它失敗了。
您可以通過更改為def No_Pages(b1,Words,Font_size):
來解決此問題def No_Pages(b1):
順便說一句,你認為pass
會做什么?這實際上并沒有做任何事情,它只是用作占位符,如果你有一段你還沒有寫的代碼(并且需要在那里有一些東西)。例如,你可以這樣做:
if some_condition:
pass
因為你還沒有計算出你需要的陳述句,但是省略 pass 陳述句會使 python 失敗,因為它期望有一些東西在那里。
uj5u.com熱心網友回復:
為了約定b1
,您需要將引數添加到類方法,而不是使用 參考實體。self
例如,您__init__
將成為
def __init__(self, Font_size=12, Words=300):
self.Words = Words
self.Font_size = Font_size
此外,您的NoPages
函式需要 3 個引數,而您只提供一個引數,即b1
. 因此錯誤Book.No_Pages() missing 2 required positional arguments: 'Words' and 'Font_size'
您可以將其重寫為
def No_Pages(self):
return self.Words/self.Font_size
uj5u.com熱心網友回復:
將您的類定義更改為:
class Book:
def __init__ (self, font_size=12, words=300):
self.font_size = font_size
self.words = words
def no_pages(self):
return self.words / self.font_size
當你定義一個函式時,就像no_pages
你說它期望的引數一樣。如果你這樣定義它:
def No_Pages(b1,Words,Font_size):
然后它需要三個引數:(b1
物件本身,當您呼叫實體方法時自動提供,通常稱為self
)Words
、 和Font_size
。由于該函式需要Words
和Font_size
引數,如果您在沒有它們的情況下呼叫它,它將引發錯誤。但是,您根本不需要將這些引數作為此函式的一部分,因為self
它們已經包含了。
添加pass
什么都不做;pass
您僅在需要一段代碼(例如,在 的主體中except
)但實際上不想執行任何內容的情況下才使用關鍵字。
如果您使用@dataclass
,您可以進一步簡化您的類,它會根據類的屬性為您構建建構式:
from dataclasses import dataclass
@dataclass
class Book:
font_size: int = 12
words: int = 300
def no_pages(self):
return self.words / self.font_size
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/536998.html
標籤:Python班级目的方法
上一篇:如何根據類資料從串列中洗掉專案
下一篇:SUM如果值型別=值