我有一个方法返回四个用于创建矩形的变量。但该函数使用另一种方法来获取某些值。
所以我的rectangle_points()方法分别从x_value()和y_value()获取两个点,但由于某种原因,我无法从rectangle_points()内部对x_value()进行函数调用我得到一个NameError:name'x_value'未定义
from random import *
class Rectangle:
def x_value():
return choice(range(0, 800, 10))
def y_value():
return choice(range(0, 600, 10))
def rectangle_points():
x1 = x_value()
y1 = y_value()
x2 = x1 + 10
y2 = y1 + 10
return x1, y1, x2, y2
print('for rectangle points are {}'.format(rectangle_points()))
现在的预期结果应该是打印出四个点,但我得到一个NameError:未定义名称'x_value'。 ps我假设如果要到达那一行,我将为y1 = y_value()行得到同样的问题。
根据@JBirdVegas的建议,我想为您提供完整的答案。
from random import choice
class Rectangle:
def x_value(self):
return choice(range(0, 800, 10))
def y_value(self):
return choice(range(0, 600, 10))
def rectangle_points(self):
x1 = self.x_value()
y1 = self.y_value()
x2 = x1 + 10
y2 = y1 + 10
return x1, y1, x2, y2
r = Rectangle()
print('for rectangle points are {}'.format(r.rectangle_points()))
你必须告诉解释器引用类自己的函数。你可以通过添加self
来实现这一目标
通过这种方式,解释器知道它引用自身,即Rectangle.x_value
而不仅仅是x_value
。正如之前在评论中所建议的那样,我建议您查看文档以获取更多详细信息,但这应该解决您现在遇到的所有问题。
编辑:我想补充一点,使用import *
并不总是最好的解决方案,您可以将其更改为from random import choice
以避免膨胀和可能的错误,如果库具有相同的命名对象
这只是一个快速解决方案。在为类创建方法时,始终在初始化期间调用self。然后,这允许您在创建新方法时使用同一类中的其他方法。这应该修复你的代码!
from random import *
class Rectangle:
def x_value(self):
return choice(range(0, 800, 10))
def y_value(self):
return choice(range(0, 600, 10))
def rectangle_points(self):
x1 = self.x_value()
y1 = self.y_value()
x2 = x1 + 10
y2 = y1 + 10
return x1, y1, x2, y2
rec = Rectangle()
print('for rectangle points are {}'.format(rec.rectangle_points()))
你真是太近了!!!
只需像self
一样添加self.x_value()
如果第一个参数应该是self
def x_value(self):
self
表示函数是实例成员而不是类成员。
print
可能不应该缩进,但这并不重要