簡體   English   中英

一個新程序員關於 python 類和變量的基本問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM