【问题标题】:Misunderstanding over classes and definitions [duplicate]对类和定义的误解[重复]
【发布时间】:2017-09-11 15:36:03
【问题描述】:

我已经得到了这两个类的定义:

class Weird(object):
    def __init__(self, x, y): 
        self.y = y
        self.x = x
    def getX(self):
        return x 
    def getY(self):
        return y

class Wild(object):
    def __init__(self, x, y): 
        self.y = y
        self.x = x
    def getX(self):
        return self.x 
    def getY(self):
        return self.y

X = 7
Y = 8

前两个问题很好;他们只是问

w2 = Wild(X, Y)
print(w2.getX())

(即 7)和

print(w2.getY())

让我困惑的是问题

w1 = Weird(X, Y)
print(w1.getX())

print(w1.getY())

他们的两个答案显然都是“错误”,但我不明白为什么会这样。给出的错误分别是“x 未定义”和“y 未定义”,但我认为xy 是我们放入函数的参数。我错过了什么?

【问题讨论】:

  • 你写的是return x,而不是return self.x
  • xyWeird.__init__ 的本地人。这意味着它们不存在于该函数的之外Weird.getXWeird.getY 是具有不同命名空间的独立函数。
  • xself.x有什么区别?
  • Wild 使用self 对象(对您当前实例的引用)来访问其属性。这就是您在不同方法之间共享信息的方式,它们都共享一个self 实例,该实例会自动传递给方法。 self.xself.y 存在只是因为 __init__ 设置了这些。
  • 最后,Python 教程:docs.python.org/3/tutorial/classes.html

标签: python class


【解决方案1】:

在您的第一堂课中,xy 是构造函数参数。 在此范围之外无法访问它们。

getX 函数中,x 不存在。您需要从 self 引用中检索它,例如在您的第二类中。

【讨论】:

    猜你喜欢
    • 2019-11-02
    • 2016-01-15
    • 1970-01-01
    • 2023-03-19
    • 2019-09-20
    • 1970-01-01
    • 2013-05-03
    • 2012-01-14
    • 2012-09-09
    相关资源
    最近更新 更多