为什么此类方法的实例不采用此参数?

Rag*_*der -1 python variables class function python-3.x

我的问题是为什么我不能创建该类的对象并为其提供整数作为参数。它完全忽略了我作为参数传递给它的值。然而,如果我从类中调用 area 函数并将相同的数字传递到括号中,它将输出所需的结果 144。

根据我到目前为止所读到的内容,我的最佳猜测是,类函数的编码方式对于我希望实现的目标来说是不正确的。我是否需要让面积函数采用如下参数:self.length

# -*- coding: utf-8 -*-
class square:
    sides = 4
    def __init__(self, length):
        self.length = length
    def area(self, length):
        return length * length

box = square(12)
print(box.area())
Run Code Online (Sandbox Code Playgroud)

输出:TypeError: area() missing 1 required positional argument: 'length'

创建的对象不应该在该对象的生命周期内保存赋予它的值吗?如果调用看起来像这样,为什么当我告诉它第二次从区域方法打印时它会抛出另一个错误?

print(box.area(12))
output:144
print(box.area())
output: <bound method square_shape.area of <__main__.square_shape object at 0x7f5f88355b70>>
Run Code Online (Sandbox Code Playgroud)

如果这个问题的措辞有点奇怪,我很抱歉,但我只是在寻找尽可能多的信息,并试图更好地理解我在这里所做的事情。关于这个主题的其他问题并没有很好地理解我想要弄清楚的内容。

Bla*_*are 5

你正在考虑 self.length。length(前面没有“self.”)只是一个局部变量。如果这是一个论点,你需要提供它。

您可能想要的是: def area(self): return self.length * self.length