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