382 字
2 分钟
类和类之间的关系
类和类之间的关系
-is-a 关系:(继承) -has-a 关系(关联/聚合/合成) -use-a 关系(依赖)
Python解释器搜索一个变量会按照LEGB的顺序进行搜索 LEGB - Local ->Embedded ->Global -> BUilt-in 局部 嵌套 全局 内置 在函数中定义的变量正常情况下属于局部作用域 但是可以通过nolocal或global关键字将其放到嵌套或全局作用域UML -Unified Modeling Language - 统一建模语言 标准化的图形符号 - 便于沟通交流
重要的三种图:用例图 / 类图 / 时序图
from enum import Enum,uniqueimport random
# 定义枚举(定义符号常量的最佳选择,符号常量总是优于字面常量)# @unique 限定唯一性@uniqueclass Suite(Enum): """docstring for suite"""
SPADE = 0 HEART = 1 CLUB = 2 DIAMOND = 3
class Card(object): """docstring for ClassName""" def __init__(self, suite, face): self.suite =suite self.face = face
def show(self): '显示牌面' suites = ['黑桃', '红心', '梅花', '方块'] face = ['', 'A','2','3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q','k'] return f'{suites[self.suite.value]} {face[self.face]}'
def __str__(self): return self.show()
def __repr__(self): return self.show()
class Poker(object): """扑克"""
def __init__(self): self.index = 0 self.cards = [Card(suite,face) for suite in Suite for face in range(1,14)]
def shuffle(self): '''洗牌(随机乱序)''' random.shuffle(self.cards) self.index = 0
def deal(self): '''发牌''' card = self.cards[self.index] self.index += 1 return card
@property def has_more(self): return self.index < len(self.cards)
class Player(object):
def __init__(self,name): self.name = name self.card = []
def get_one(self,card): '''摸一张牌''' self.card.append(card)
def sort(self, comp=lambda card: card.face): self.card.sort(key= comp)
def main(): poker = Poker() print(poker.cards) poker.shuffle()
# print(poker.deal()) players= [Player('东邪'),Player('西毒'), Player('南帝'), Player('北丐')] while poker.has_more: for player in players: player.get_one(poker.deal())
for player in players: player.sort() print(player.name, end='') print(player.card)
if __name__ == '__main__': main()





