382 字
2 分钟
类和类之间的关系
2019-02-28

类和类之间的关系#

-is-a 关系:(继承) -has-a 关系(关联/聚合/合成) -use-a 关系(依赖)

Python解释器搜索一个变量会按照LEGB的顺序进行搜索
LEGB - Local ->Embedded ->Global -> BUilt-in
局部 嵌套 全局 内置
在函数中定义的变量正常情况下属于局部作用域
但是可以通过nolocal或global关键字将其放到嵌套或全局作用域

UML -Unified Modeling Language - 统一建模语言 标准化的图形符号 - 便于沟通交流

重要的三种图:用例图 / 类图 / 时序图

from enum import Enum,unique
import random
# 定义枚举(定义符号常量的最佳选择,符号常量总是优于字面常量)
# @unique 限定唯一性
@unique
class 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()
类和类之间的关系
https://gilgameshzzz.github.io/posts/类和类之间的关系/
作者
Amadeus
发布于
2019-02-28
许可协议
CC BY-NC-SA 4.0