擅长:python、mysql、java
<p>如前所述,将类属性与实例属性混淆。你知道吗</p>
<p>在您的示例中,suitList和number是class属性,它们在所有实例(c1、c2、c3)中共享
当您在<code>c1.suitList[0] = "Heart"</code>中更改类属性时,它将反映在所有类实例中。你知道吗</p>
<p>要解决这个问题,你有一些选择:我给你两个。你知道吗</p>
<h3>1) 仅使用实例属性:</h3>
<pre><code>class Card:
def __init__(self,number=0,suit="CLubs"):
self.number = number
self.suit = suit
def __str__(self):
return "%s %d"%(self.suit,self.number)
c1 = Card()
c2 = Card()
c1.suit = "Heart"
c1.number = 3
print c1
print c2
</code></pre>
<p>在本例中,没有class属性,要更改卡套件,可以使用c1.suit直接分配它。你知道吗</p>
<h3>2) 混合使用类/属性:</h3>
<pre><code>class Card:
suitList = ["CLubs", "Heart"]
def __init__(self,number=0,rank=0):
self.rank = rank
self.number = number
def __str__(self):
return (Card.suitList[self.rank] + " " + str(self.number))
c1 = Card()
c2 = Card()
c1.rank = 1
c1.number = 3
print c1
print c2
</code></pre>
<p>在本例中,Rank是在suitList中查找的索引。要更改卡片的套装,您需要更改它的等级,而不是列表。你知道吗</p>
<p>两个示例输出:</p>
<pre><code>Heart 3
CLubs 0
</code></pre>