【问题标题】:TypeError: takes 0 positional arguments but 1 was givenTypeError:接受 0 个位置参数,但给出了 1 个
【发布时间】:2020-06-13 03:27:08
【问题描述】:

由于出现以下错误,请帮助我在这里做错了什么,

TypeError: fizz_buzz() 接受 0 个位置参数,但给出了 1 个

class FizzBuzz:
    def __init__(self, number_value):
        self.number_value = number_value

    def fizz_buzz():
        if number_value % 3 == 0 and number_value % 5 == 0:
            print("FizzBuzz")
        elif number_value % 3 == 0:
            print("Fizz")
        elif number_value % 5 == 0:
            print("Buzz")
        else:
            return f"{number_value} can't be multiplied by either 3 or 5"

number_value = int(input("Enter number: "))
fizzbuzz_object = FizzBuzz(number_value)
fizzbuzz_object.fizz_buzz()

【问题讨论】:

标签: python


【解决方案1】:

这里是详细答案:

 fizzbuzz_object.fizz_buzz() # you did not pass the instance. "self" is just a symbol that represents the object

fizz_buzz() 是一种方法。方法是 Python 中的对象类型。方法像函数一样是可调用的,但它们绑定了某个对象,并且该对象作为其第一个参数注入到方法中。这就是为什么类方法被称为“实例方法”。如果你运行这个:

   print(fizzbuzz_object.fizz_buzz)

你会得到这个:

    <bound method FizzBuzz.fizz_buzz of <__main__.FizzBuzz object at 0x7ffa306574f0>>

Python 看到.fizz_buzz 点并且它知道这个方法被绑定到对象。这是fizz_buzz 变成方法的时候。到目前为止,它被认为是一个函数。这实际上是方法和功能之间的区别。方法是绑定的。

type(FizzBuzz.fizz_buzz) is type(fizzbuzz_object.fizz_buzz)

这将返回false。第一种是“函数”,第二种是“方法”

If you called `FizzBuzz.fizz_buzz` like this you will not get same error.

这就是python调用的幕后

  FizzBuzz.fizz_buzz(fizzbuzz_object)

通过将对象注入方法,方法可以访问对象的命名空间。这也将 2 个属性传递给方法

print(fizzbuzz_object.fizz_buzz.__self__)
print(fizzbuzz_object.fizz_buzz.__func__)

<__main__.FizzBuzz object at 0x7ffa306574f0>  // object
<function FizzBuzz.fizz_buzz at 0x7ffa306620d0> // method

【讨论】:

    【解决方案2】:

    这意味着你应该在一个类中包含至少一个参数的所有函数,

    def fizz_buzz(self):
    

    【讨论】:

      【解决方案3】:

      您需要引用该类的当前(自身)实例。试试:

      def fizz_buzz(self):
      

      代替:

      def fizz_buzz():
      

      【讨论】:

        【解决方案4】:

        确保在创建类方法时始终有 1 个名为“self”的参数:

        def fizz_buzz(self):
            if number_value % 3 == 0 and number_value % 5 == 0:
                print("FizzBuzz")
            elif number_value % 3 == 0:
                print("Fizz")
            elif number_value % 5 == 0:
                print("Buzz")
            else:
                return f"{number_value} can't be multiplied by either 3 or 5"
        

        【讨论】:

          【解决方案5】:

          添加了解决问题的以下代码:

          `def fizz_buzz(self):`
          

          【讨论】:

            猜你喜欢
            • 2013-09-23
            • 2017-10-05
            • 2016-01-30
            • 2019-06-26
            • 2014-11-12
            • 1970-01-01
            • 2019-04-15
            • 1970-01-01
            相关资源
            最近更新 更多