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
的属性,但是它可以成功执行且没有任何错误。所以我想知道它是如何工作的。请解释一下,也请告诉我用法,因为按照说明我们可以使用它。
答案 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