【问题标题】:Python OOP class method BookPython OOP 类方法书
【发布时间】:2022-11-19 02:07:07
【问题描述】:

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 12pages15

【问题讨论】:

    标签: python class object methods


    【解决方案1】:

    所以 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 失败,因为它期望某物到那里。

    【讨论】:

      【解决方案2】:

      为了约定,您需要将 self 参数添加到类方法,而不是使用 b1 引用实例。例如,您的__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
      

      【讨论】:

        【解决方案3】:

        将您的类定义更改为:

        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)、WordsFont_size。由于该函数需要 WordsFont_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
        

        【讨论】:

          猜你喜欢
          • 2022-06-17
          • 1970-01-01
          • 1970-01-01
          • 2021-12-02
          • 2021-12-23
          • 1970-01-01
          • 2023-03-15
          • 1970-01-01
          • 2017-09-02
          相关资源
          最近更新 更多