我有一个返回四个用于创建矩形的变量的方法。但是该函数使用另一种方法来获取一些值。
所以我的angle_points()方法分别从x_value()和y_value()获得两个点,但是由于某种原因,我无法从矩形_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()也会遇到同样的问题。
答案 0 :(得分:1)
这只是一个快速修复。为类创建方法时,总是在初始化期间调用 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()))
答案 1 :(得分:1)
根据@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
以避免膨胀和可能的错误< / p>
答案 2 :(得分:-2)
您如此亲密!
只需像self
那样添加self.x_value()
如果第一个参数应该为self
def x_value(self):
self
表示该函数是实例成员,而不是类成员。
print
可能不应该缩进,但这无关紧要