为什么这个类的方法的这个实例没有采用这个论点?

时间:2016-08-12 01:44:42

标签: python function class python-3.x variables

我的问题是为什么我不能让类的对象给它一个整数作为参数。它完全忽略了我作为论证传递的价值。然而,如果我从类中调用区域函数并将相同的数字传递到它的括号中,它将输出所需的结果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())

输出: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>>

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

2 个答案:

答案 0 :(得分:4)

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

你可能想要的是: {{1}}

答案 1 :(得分:1)

您的area获取self参数,该参数足以访问self.length

...
def area(self):
  return self.length * self.length

然后,您可以致电square(3).area()并获取9

您当前的声明需要显式长度参数,例如square(3).area(4)会生成16

OOP的一个关键原则是方法可以访问对象(或通常是实例的)状态,并且可以在该状态下运行,而不是传递它明确。

在Python中,通常名为self的参数用于将有问题的对象传递给方法。 area方法适用于square的{​​{1}};您可以length访问它。 self.lengthself的一个实例,例如square返回。