[英]Basic question about python classes and variables from a new programmer
我有一個關於正在更新的變量值的簡單問題,請。 我運行了以下代碼:
class Number:
def __init__(self,val):
self.val=val
def addthistoobj(self,obj):
obj.val=self.val+obj.val
def addthistovar(self,var):
var=self.val+var
x=Number(7)
print("value of x is",x.val)
y=Number(10)
print("value of y (obj) is",y.val)
x.addthistoobj(y)
print("value of y (obj) after adding is",y.val)
p=10
print("value of p (var) is",p)
x.addthistovar(p)
print("value of p (var) after adding is",p)
我得到的輸出是:
”
x 的值為 7
y (obj) 的值為 10
添加后 y(obj) 的值為 17
p (var) 的值為 10
添加后 p (var) 的值為 10
”
對象的值會更新,但變量的值不會。
為什么會這樣?
感謝您的時間!
當您執行x.addthistovar(p)
,您將x
的值添加到p
並創建一個名為 var 的新對象,但它隨着addthistovar
函數的作用域關閉而“消失”。
如果你想在這之后p == 17
,你需要一個 return 語句。
class Number:
...
def addthistovar(self,var):
return self.val + var
...
p = x.addthistovar(p)
更改您的函數以返回總和。 由於您傳遞的值與該對象無關,因此除非您為其定義字段,否則無法保存。 您可以將結果保存在可變result
並將其用於print
語句。
class Number:
def __init__(self,val):
self.val=val
def addthistoobj(self,obj):
obj.val=self.val+obj.val
def addthistovar(self,var):
return self.val+var
x=Number(7)
print("value of x is",x.val)
y=Number(10)
print("value of y (obj) is",y.val)
x.addthistoobj(y)
print("value of y (obj) after adding is",y.val)
p=10
print("value of p (var) is",p)
result = x.addthistovar(p)
print("value of p (var) after adding is", result)
這是因為p
永遠不會被修改。 讓我們看一個更簡單的例子:
def add_to(x, y):
x = x + y
a, b = 1, 2
add_to(a, b)
這可能會讓您相信x
將在調用add_to
期間重新分配。 事實並非如此。 x
中的范圍add_to
變為一個不同的對象,這是因為+
為整數運算符返回新的int。 它還會在add_to
范圍的末尾收集(消失)垃圾。 要重新分配a
,您首先需要返回新值,然后重新分配它:
def add_to(x, y):
return x + y # this returns a new integer created by x + y
a, b = 1, 2
a = add_to(a, b) # this reassigns the value 3 to a
現在對於你的班級,你需要做同樣的事情:
class Number:
def __init__(self,val):
self.val=val
def addthistoobj(self,obj):
obj.val=self.val+obj.val
def addthistovar(self,var):
return self.val+var
p = 10
x = Number(7)
p = x.addthistovar(p)
p
17
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.