python如何从其他类获取对变量的访问

python如何从其他类获取对变量的访问,python,class,variables,Python,Class,Variables,又是我。我想从方法howManyCards中的class-Table中的class-deck访问变量deck。换句话说,我创建了一副牌,我想做一个方法,让我从牌组列表中取第一张牌的num,我不知道如何正确地写这个。行self.onTheTable=Deck.Deck[:num]不起作用。我有一个错误AttributeError:type对象“Deck”没有我理解的属性“Deck”,但我不知道如何以正确的方式更改它。多谢各位 class Card: def __init__(self, f

又是我。我想从方法
howManyCards
中的
class-Table
中的
class-deck
访问变量
deck
。换句话说,我创建了一副牌,我想做一个方法,让我从牌组列表中取第一张牌的
num
,我不知道如何正确地写这个。行
self.onTheTable=Deck.Deck[:num]
不起作用。我有一个错误
AttributeError:type对象“Deck”没有我理解的属性“Deck”
,但我不知道如何以正确的方式更改它。多谢各位

class Card:
    def __init__(self, figure, colour):
        self.colour = colour
        self.figure = figure
    def __repr__(self):
        return str(self.figure) + str(self.colour)

class Deck:
    def __init__(self):
        self.deck = []
    def createDeck(self):
        for colour in ["h", "d", "c", "s"]:
            for figure in ["2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"]:
                self.deck.append(Card(figure, colour))

class Table():
    def __init__(self):
        self.onTheTable = []
    def howManyCards(self, num):
       self.onTheTable = Deck.deck[:num]

deck = Deck()
deck.createDeck()
table = Table()
table.howManyCards(10)
您需要进行两项更改:

def howManyCards(self, deck, num):
   self.onTheTable = deck.deck[:num]
表格。howManyCards(甲板,10)


原始代码(
Deck.Deck[:num]
)的问题在于将
Deck
视为类变量
deck
是一个实例变量。

正如MobileBen指出的,您没有访问deck对象。 您可以使用受保护的变量名和
@property
装饰符来提供对内部变量的公共只读访问。 您还可以在类初始化期间传递与该表对象一起使用的Deck实例

class Deck:
    def __init__(self):
        self._deck = []    # Protected member starting with _

    def createDeck(self):
        for colour in ["h", "d", "c", "s"]:
            for figure in ["2", "3", "4", "5", "6", "7", "8", "9", "T", "J", "Q", "K", "A"]:
                self._deck.append(Card(figure, colour))

    @property
    def deck(self):
        return self._deck


class Table():
    def __init__(self, deck):
        self._onTheTable = []
        self._deck = deck

    def howManyCards(self, num):
       self._onTheTable = self._deck.deck[:num]

    @property
    def onTheTable(self):
       return self._onTheTable

deck = Deck()
deck.createDeck()
table = Table(deck)
table.howManyCards(10)

print(table.onTheTable)

是的,我不明白发生了什么,但我在战斗。谢谢,这很有效。重要的是努力。坚持下去,它会更有意义。有关类和实例变量的更多详细信息,您可以查看这篇文章。