我有一个返回四个变量的方法,用于创建矩形。但是该函数使用另一种方法来获取一些值。
所以我的 rectangle_points(( 方法分别从 x_value(( 和 y_value(( 获得两分,但由于某种原因我无法从 rectangle_points(( 内部对 x_value(( 进行函数调用,我得到一个 NameError:未定义名称"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()))
现在的预期结果应该是打印出这四点,但我得到一个名称错误:名称"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
可能不应该缩进,但这并不重要