Python类与实例变量|整数/列表

时间:2016-11-15 01:59:10

标签: python

我试图了解类变量和 init 之间的区别。我理解类变量通常是静态的并且可以改变。

我想知道为什么当你通过Sam的实例更改变量帐户后打印变量帐户时,它已经为David更改了。

但是,无论何时更新Sam的余额,David都不会更改。谢谢。

class BankAccount:
    Balance = 0
    Accounts = []

Sam = BankAccount()
David = BankAccount()

print("Sam's Balance", Sam.Balance)
print("David's Balance", David.Balance)
print("")
print("Sam's Accounts", Sam.Accounts)
print("David's Accounts", David.Accounts)


Sam.Balance = 1000
Sam.Accounts.append("Sam's Personal Checking")

print("Sam's Balance", Sam.Balance)
print("David's Balance", David.Balance)
print("")
print("Sam's Accounts", Sam.Accounts)
print("David's Accounts", David.Accounts)

3 个答案:

答案 0 :(得分:1)

每当你为一个实例分配一个属性时,它就会变成一个实例变量(不被任何其他实例共享),即使它之前是一个类变量。这就是Sam.Balance = 1000的情况。但是,Sam.Accounts.append("Sam's Personal Checking")是完全不同的情况 - 您没有分配任何内容,“帐户”列表与之前完全相同,仍然是类变量。您只需更改该列表的内容,无论您如何检索列表,都可以看到该内容。

答案 1 :(得分:0)

Python中的整数是不可变的,所以当Sam.Balance = 1000时,这会将实例变量Balance添加到实例Sam,而不是更改类变量。

答案 2 :(得分:0)

为了说明给出的答案:您可以使用id()is运算符检查对象是否相同。

function copyValue() {
    document.getElementById("tes1").value = this.textContent === "Yes" ? '1' : '0';
}

Naming and Binding读得很好。 Classes section of the Tutorial可以提供见解。