如果x不是类绑定变量或实例绑定变量,那么self.x如何工作?

时间:2019-01-12 16:20:44

标签: python

如果self.x不是类绑定变量或实例绑定变量,x的工作原理是什么?在这种情况下,使用它有什么好处?

我的分析:

通常,如果我们执行a.a1 = 5,则解释器将给出NameEror:名称a未定义。这意味着我们不能使用字母.定义变量,因为它用于调用对象的属性。 如果我将代码写为

a = 5
a.a1 = 10

它给出AttributeError:int对象没有属性x。这是预期的。 现在看看我下面的代码

class Example:
    p = 1
    def __init__(self):
        self.q = 2
    def my_function(self):
        self.x = 5
        return self.x
obj = Example()
print(obj.my_function())
print(dir(obj), obj.__dict__)

因为x既不是类绑定变量,也不是实例绑定变量。因此,我假设x不是self的属性,但是它可以成功执行且没有任何错误。所以我想知道它是如何工作的。请解释一下,也请告诉我用法,因为按照说明我们可以使用它。

3 个答案:

答案 0 :(得分:2)

只需gradle.properties,您就可以创建一个新属性,稍后可以对其进行修改,就像普通变量一样;除了通过实例访问它。

答案 1 :(得分:1)

那时,您正在为类型Example的对象声明并实例化一个新字段。在其他函数中,将引用self.x时,不会引发任何错误。如果未声明,则会引发运行时错误,例如:

class Example:
    p = 1
    def __init__(self):
        self.q = 2
    def my_function(self):
        self.x = 5
        return self.x
    def other(self):
        return self.x
obj = Example()
print(obj.other())
print(obj.my_function())

结果为AttributeError: 'Example' object has no attribute 'x'

需要牢记执行顺序,以便在引用之前声明并实例化该字段。

答案 2 :(得分:0)

这是定义属性的标准方法。在这里,您可以找到有关类和属性的更多信息:https://docs.python.org/2/tutorial/classes.html