在类中定义方法时,方法作用域是否重要



我有一个返回四个变量的方法,用于创建矩形。但是该函数使用另一种方法来获取一些值。

所以我的 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可能不应该缩进,但这并不重要

相关内容

  • 没有找到相关文章

最新更新