簡體   English   中英

Python OOP class 方法書

[英]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_sizeWords之后添加 pass 並認為它可以返回words 300Font_size 12pages being 15

所以No_pages沒有使用這些參數( WordsFont_size )——它是從b1參數(通常被稱為self ,順便說一句。)獲取它們。本質上,你把它交給了一個完整的容器b1 ,它得到了它需要的一切從那里 - 但你也告訴它應該明確地交給它WordsFont_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 )、 WordsFont_size 由於 function 需要WordsFont_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM