美文网首页
python关于特性的两个基本设计模式

python关于特性的两个基本设计模式

作者: 第八共同体 | 来源:发表于2018-01-06 16:32 被阅读0次

    1 .主动模式

    每当更新特性值时,其他相关特性值都会立即被重新计算

    class Hand_Eager(Hand):
    
        def __init__(self, dealer_card, *cards):
            self.dealer_card = dealer_card
            self._cards = list()
            self.total = 0
            self._delta_soft = 0
            self._hard_total = 0
            for c in cards:
                self.card = c
    
    
        @property
        def card(self):
            return self._cards
    
        @card.setter
        def card(self, aCard):
            self._cards.append(aCard)
            self._delta_soft = max(aCard.soft-aCard.hard, self._delta_soft)
            self._hard_total += aCard.hard
            self._set_total()
    
        @card.deleter
        def card(self):
            removed = self._cards.pop(-1)
            self._hard_total -= removed.hard
            self._delta_soft = max(c.soft-c.hard for c in self._cards)
            self._set_total()
    
    
        def _set_total(self):
            if self._hard_total + self._delta_soft <=21:
                self.total = self._hard_total + self._delta_soft
            else:
                self.total = self._hard_total
    

    2.延迟计算

    仅当访问特性时,才会触发计算过程

    class HandLazy(Hand):
    
        def __init__(self, dealer_card, *cards):
            self.dealer_card = dealer_card
            self._cards = list(cards)
    
        @property
        def total(self):
            delta_soft = max(c.soft - c.hand for c in self._cards)
            hard_total = sum(c.hard for c in self._cards)
            if hard_total + delta_soft <=12: return hard_total + delta_soft
            return hard_total
    
        @property
        def card(self):
            return  self._cards
        @card.setter
        def card(self, aCard):
            self._cards.append(aCard)
    
        @card.deleter
        def card(self):
            self._cards.pop(-1)
    

    父类Hand

    class Hand:
    
        def __str__(self):
            return ", ".join(map(str, self.card))
        def __repr__(self):
            return "{__class__.__name__}({dealer_card!r}, {_cards_str})".\
                format(___class__=self.__class__,
                       _cards_str=", ".join(map(repr, self.card)),
                       **self.__dict__)
    

    相关文章

      网友评论

          本文标题:python关于特性的两个基本设计模式

          本文链接:https://www.haomeiwen.com/subject/srbynxtx.html