我的问题是为什么我不能让类的对象给它一个整数作为参数。它完全忽略了我作为论证传递的价值。然而,如果我从类中调用区域函数并将相同的数字传递到它的括号中,它将输出所需的结果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>>
对不起,如果这个问题有点奇怪,但我只是在寻找尽可能多的信息,并试图更好地理解我在这里所做的事情。关于这个问题的其他问题并没有很好地掌握我想要弄清楚的内容。
答案 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.length
是self
的一个实例,例如square
返回。