python-3.x TypeError:接受0个位置参数,但提供了1个

cygmwpex  于 2022-11-19  发布在  Python
关注(0)|答案(6)|浏览(206)

请帮助我,我在这里做错了什么,因为我得到下面的错误:
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()
xyhw6mcr

xyhw6mcr1#

这意味着类中的所有函数都应该至少有一个参数,

def fizz_buzz(self):
z9smfwbn

z9smfwbn2#

确保在创建类方法时始终有一个名为“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"
db2dz4w8

db2dz4w83#

您需要引用类的当前(self)示例。请尝试:

def fizz_buzz(self):

而不是:

def fizz_buzz():
ippsafx7

ippsafx74#

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

`def fizz_buzz(self):`
dkqlctbz

dkqlctbz5#

下面是详细的答案:

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)

通过将对象注入到方法中,方法可以访问对象的名称空间。

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
yquaqz18

yquaqz186#

示例方法需要在第一个参数中使用self,如下所示:

class Person:
            # Here     
    def test(self): 
        print("Test1")

p = Person()
p.test1()

输出量:

Test1

详细地,我在我的答案中解释了关于What is an "instance method" in Python?示例方法,并且在我的答案中解释了关于@classmethod vs @staticmethod in Python的**@类方法@静态方法**:

相关问题