[英]Python OOP class method Book
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())
我實際上通過另一種方法嘗試了這一點,例如在Font_size
和Words
之后添加 pass 並認為它可以返回words 300
, Font_size 12
和pages
being 15
所以No_pages
沒有使用這些參數( Words
和Font_size
)——它是從b1
參數(通常被稱為self
,順便說一句。)獲取它們。本質上,你把它交給了一個完整的容器b1
,它得到了它需要的一切從那里 - 但你也告訴它應該明確地交給它Words
和Font_size
,它不需要。 因為你沒有通過它們,所以它失敗了。
您可以通過將def No_Pages(b1,Words,Font_size):
更改為def No_Pages(b1):
順便問一下,你認為pass
會做什么? 這實際上並沒有做任何事情,它只是用作占位符,如果你有一段你還沒有寫的代碼(並且需要在那里有一些東西)。例如,你可以這樣做:
if some_condition:
pass
因為你還沒有計算出你需要的語句,但是省略 pass 語句會使 python 失敗,因為它期望有一些東西在那里。
為了約定,您需要將self
參數添加到 class 方法,而不是使用b1
引用實例。 例如,您的__init__
將變為
def __init__(self, Font_size=12, Words=300):
self.Words = Words
self.Font_size = Font_size
此外,您的NoPages
function 需要 3 個參數,而您只提供一個參數,即b1
。 因此錯誤Book.No_Pages() missing 2 required positional arguments: 'Words' and 'Font_size'
您可以將其重寫為
def No_Pages(self):
return self.Words/self.Font_size
將您的 class 定義更改為:
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
當您定義 function 之類的no_pages
時,您會說出它期望的 arguments 。 如果你這樣定義它:
def No_Pages(b1,Words,Font_size):
然后它需要三個 arguments: b1
(object 本身,當您調用實例方法時自動提供,通常稱為self
)、 Words
和Font_size
。 由於 function 需要Words
和Font_size
arguments,如果您在沒有它們的情況下調用它會引發錯誤。 但是,您根本不需要那些 arguments 成為這個 function 的一部分,因為self
已經包含它們。
添加pass
沒有任何作用; 您僅在需要一段代碼(例如在except
的主體中)但實際上不想執行任何內容的情況下才使用pass
關鍵字。
如果您使用@dataclass
,您可以進一步簡化您的 class ,它會根據類的屬性為您構建構造函數:
from dataclasses import dataclass
@dataclass
class Book:
font_size: int = 12
words: int = 300
def no_pages(self):
return self.words / self.font_size
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.