用Python管理实例

用Python管理实例,python,static,class,initialization,instances,Python,Static,Class,Initialization,Instances,我是Python新手,这是我第一次问stackOverflow问题,但这是一个很长时间的读者。我正在做一个简单的基于卡片的游戏,但在管理我的手类实例时遇到了困难。如果你看下面,你会发现手牌类是一个简单的卡片容器(只是int值),每个玩家类都包含一个手牌类。然而,每当我创建Player类的多个实例时,它们似乎都在操纵Hand类的一个实例。根据我在C和Java中的经验,我似乎在某种程度上使我的手工类是静态的。如果有人能帮我解决这个问题,我将不胜感激 谢谢,, 泰德 澄清一下:这种情况的一个例子是 p

我是Python新手,这是我第一次问stackOverflow问题,但这是一个很长时间的读者。我正在做一个简单的基于卡片的游戏,但在管理我的手类实例时遇到了困难。如果你看下面,你会发现手牌类是一个简单的卡片容器(只是int值),每个玩家类都包含一个手牌类。然而,每当我创建Player类的多个实例时,它们似乎都在操纵Hand类的一个实例。根据我在C和Java中的经验,我似乎在某种程度上使我的手工类是静态的。如果有人能帮我解决这个问题,我将不胜感激

谢谢,, 泰德

澄清一下:这种情况的一个例子是

p=player.player()
p1=播放器。播放器()
p、 收款卡(15)
p1.接收卡(21)
p、 查看手()

这将导致: [15,21]
即使只有一张卡被添加到p

手工课:

class Hand:

    index = 0
    cards = [] #Collections of cards

    #Constructor
    def __init__(self):
        self.index
        self.cards

    def addCard(self, card):
        """Adds a card to current hand"""
        self.cards.append(card)
        return card

    def discardCard(self, card):
        """Discards a card from current hand"""
        self.cards.remove(card)
        return card

    def viewCards(self):
        """Returns a collection of cards"""
        return self.cards

    def fold(self):
        """Folds the current hand"""
        temp = self.cards
        self.cards = []
        return temp
球员级别

import hand
class Player:

 name = ""
 position = 0
 chips = 0
 dealer = 0
        pHand = []

 def __init__ (self, nm, pos, buyIn, deal):
            self.name = nm
            self.position = pos
            self.chips = buyIn
            self.dealer = deal

            self.pHand = hand.Hand()
            return

        def recieveCard(self, card):
            """Recieve card from the dealer"""
            self.pHand.addCard(card)
            return card

        def discardCard(self, card):
            """Throw away a card"""
            self.pHand.discardCard(card)
            return card

        def viewHand(self):
            """View the players hand"""
            return self.pHand.viewCards()

        def getChips(self):
            """Get the number of chips the player currently holds"""
            return self.chips

        def setChips(self, chip):
            """Sets the number of chips the player holds"""
            self.chips = chip
            return

        def makeDealer(self):
            """Makes this player the dealer"""
            self.dealer = 1
            return

        def notDealer(self):
            """Makes this player not the dealer"""
            self.dealer = 0
            return

        def isDealer(self):
            """Returns flag wether this player is the dealer"""
            return self.dealer

        def getPosition(self):
            """Returns position of the player"""
            return self.position

        def getName(self):
            """Returns name of the player"""
            return self.name
根据我在C和Java中的经验,我似乎在某种程度上使我的手工类是静态的

实际上,这基本上就是你在做的。不是让类变为静态,而是让变量变为静态

当您编写这样的声明时:

class Hand:
    cards = []
class Hand {
    static {
        cards = new object[];
    }
}
该变量(
cards
)与类关联,而不是与实例关联。与Java类似,Python类中不属于该类方法的每个语句基本上都在静态初始值设定项中运行。你几乎可以这样想:

class Hand:
    cards = []
class Hand {
    static {
        cards = new object[];
    }
}
(当然,这只是一个粗略的类比)

要在Python中创建实例变量,必须将其设置为实例的一个属性,这要求您等待,直到有了对实例的引用。实际上,这意味着您在构造函数中初始化它,如下所示:

class Hand:
    def __init__(self):
        self.cards = []
根据我在C和Java中的经验,我似乎在某种程度上使我的手工类是静态的

实际上,这基本上就是你在做的。不是让类变为静态,而是让变量变为静态

当您编写这样的声明时:

class Hand:
    cards = []
class Hand {
    static {
        cards = new object[];
    }
}
该变量(
cards
)与类关联,而不是与实例关联。与Java类似,Python类中不属于该类方法的每个语句基本上都在静态初始值设定项中运行。你几乎可以这样想:

class Hand:
    cards = []
class Hand {
    static {
        cards = new object[];
    }
}
(当然,这只是一个粗略的类比)

要在Python中创建实例变量,必须将其设置为实例的一个属性,这要求您等待,直到有了对实例的引用。实际上,这意味着您在构造函数中初始化它,如下所示:

class Hand:
    def __init__(self):
        self.cards = []

你的问题很简单

如果将列表分配给python类主体,那么在向其追加项时,它们将存储在类级别,而不是实例级别

您可以通过添加以下行来解决此问题:

def __init__(self):
    self.cards = []
这是一个众所周知的python陷阱案例,我建议您阅读:
你的问题很简单

如果将列表分配给python类主体,那么在向其追加项时,它们将存储在类级别,而不是实例级别

您可以通过添加以下行来解决此问题:

def __init__(self):
    self.cards = []
这是一个众所周知的python陷阱案例,我建议您阅读:

正如其他答案所指出的,您对类变量和实例变量感到困惑。我建议您回顾一下Python类如何工作的基础知识。这是我为另一个问题写的答案;阅读这篇文章可能会对你有所帮助


正如其他答案所指出的,您对类变量和实例变量感到困惑。我建议您回顾一下Python类如何工作的基础知识。这是我为另一个问题写的答案;阅读这篇文章可能会对你有所帮助


非常感谢您!我不能告诉你这有多大帮助。非常感谢你!我不能告诉你这有多大帮助。