Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用一个类';python中另一个内部的_Python - Fatal编程技术网

调用一个类';python中另一个内部的

调用一个类';python中另一个内部的,python,Python,我如何调用属于Deck类的shuffle和takecard方法,并在Dealer类中调用它,而不继承整个类 #!/usr/bin/python import random class Card: """A card object with a suit and rank.""" RANKS = (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) SUITS = ('Spades', 'Diamonds', 'Hearts', 'Clu

我如何调用属于Deck类的shuffle和takecard方法,并在Dealer类中调用它,而不继承整个类

#!/usr/bin/python
import random
class Card:
    """A card object with a suit and rank."""
    RANKS = (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
    SUITS = ('Spades', 'Diamonds', 'Hearts', 'Clubs')
    def __init__(self, rank, suit):
       self._rank = rank
       self._suit = suit
    def getRank(self):
       return self._rank
    def getSuit(self):
       return self._suit
    def __str__(self):
       translate = {11:'Jack', 12:'Queen', 13:'King', 14: 'Ace'}
       r = self._rank
       if r in [11, 12, 13, 14]:
          myrank = translate[r]
       else:
          myrank = str(r)
       return myrank + " of " + self._suit
    def __lt__(self, other):
        return( self._rank < other.getRank() )
class Deck:
    def __init__(self):
        self._cards = []
        for suit in Card.SUITS:
            for rank in Card.RANKS:
                c = Card(rank, suit)
                self._cards.append(c)
    def shuffle(self):
        random.shuffle(self._cards)
    def takecard(self):
        if len(self._cards) == 0:
            return None
        else:
            #print self._cards.pop()
            return self._cards.pop()
    def __len__(self):
        return len(self._cards)
    def __str__(self):
        result = ""
        for c in self._cards:
            result = result + str(c) + '\n'
        return result
class Dealer(object):
    def __init__(self, name):
        self.name = name
    def shuffle(self):
        deck=self.deck
        self.deck.shuffle()     
    def deal(self):
        self.deck.takecard()
#/usr/bin/python
随机输入
班级卡:
“”“具有套装和等级的卡片对象。”“”
排名=(2,3,4,5,6,7,8,9,10,11,12,13,14)
套装=(‘黑桃’、‘钻石’、‘红桃’、‘梅花’)
定义初始(自我、等级、套装):
自我。_秩=秩
自已
def getRank(自我):
返回自我。_等级
def getSuit(自我):
回归自我
定义(自我):
翻译={11:'Jack',12:'Queen',13:'King',14:'Ace'}
r=自我排名
如果r在[11,12,13,14]中:
myrank=翻译[r]
其他:
myrank=str(r)
返回myrank+“of”+self.\u套装
定义(自身、其他):
返回(self.\u rank
如果我这样声明,self.deck.takecard和self.deck.shuffle不会返回deck方法:
Dealer('Bob',Deck)

如果您想在创建Dealer实例时传入Deck实例,请将Deck作为属性附加到Dealer,然后从Dealer的函数中调用Deck的函数,您可以执行以下操作:

class Dealer(object):
    def __init__(self, name, deck):
        self.name = name
        self.deck = deck
    def shuffle(self):
        self.deck.shuffle()
    def deal(self):
        return self.deck.takecard()
作为参数“deck”传入的对象需要是deck的实例:

a_deck = Deck()

我相信您的代码的问题在于,您需要从经销商功能返回,而不仅仅是从下面的Deck功能返回。您还需要在初始化器中设置组:

class Dealer(object):
    def __init__(self, name, deck):
        self.name = name
        self.deck = deck

    def shuffle(self):
        deck=self.deck
        return self.deck.shuffle()
    def deal(self):
        return self.deck.takecard()
最后,您应该使用以下命令初始化该类:

my_dealer = Dealer("Bob", Deck())

仅使用不带括号的Deck将导致类被提供给经销商,而不是您想要的类的实例。

返回self.Deck.shuffle()
中的
经销商。shuffle()
将返回
,因为
Deck.shuffle()
不会返回任何内容。当然,你是对的。如果需要,Deck.shuffle()应该返回Deck。您需要创建
Deck
的实例,并将其分配给Dealer实例的属性。执行此操作的逻辑位置是在
Dealer.\uuu init\uuuu()
方法中。它可以通过调用
Deck()
来创建
Deck
自身的实例,或者这样做的结果可以作为参数传递给它。此外,您并不需要
Dealer.shuffle()
中的
deck=self.deck
Dealer.deal()
应该
返回self.deck.takecard()
。谢谢您的及时回复,我这样称呼它。这两种解决方案都非常有效,尽管正如马蒂诺所指出的,洗牌并没有什么回报。