面向对象编程是一种常见的编程范式,它将现实世界中的实体抽象为对象,通过对象之间的交互来设计和构建软件系统,核心概念包括类、对象、继承、封装和多态。
在本示例中,我们将创建一个简单的扑克游戏,游戏中包含52张牌,没有大小王。游戏的目标是将这些牌发给4个玩家,每个玩家获得13张牌。牌的花色按照黑桃、红心、草花、方块的顺序排列,点数从小到大。
首先是枚举类型和牌的类定义:
from enum import Enum
class Suite(Enum):
""“花色(枚举)”""
SPADE = 0, HEART = 1, CLUB = 2, DIAMOND = 3
class Card:
""“牌”""
def __init__(self, suite, face):
self.suite = suite
self.face = face
def __repr__(self):
suits = '♠♥♣♦'
faces = ['2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A']
return f'{suits[self.suite.value]}{faces[self.face]}'
接下来是扑克类的定义:
import random
class Poker:
""“扑克”""
def __init__(self):
self.cards = [Card(suite, face) for suite in Suite for face in range(2, 15)]
self.current = 0
def shuffle(self):
""“洗牌”""
random.shuffle(self.cards)
self.current = 0
def deal(self):
""“发牌”""
if self.current < len(self.cards):
card = self.cards[self.current]
self.current += 1
return card
return None
@property
def has_next(self):
""“判断是否还有牌可以发”""
return self.current < len(self.cards)
然后是玩家类的定义:
class Player:
"""玩家"""
def __init__(self, name):
self.name = name
self.cards = []
def get_one(self, card):
""“摸牌”""
self.cards.append(card)
def arrange(self):
""“排列手中的牌”""
self.cards.sort(key=lambda x: (x.suite.value, x.face))
最后是游戏的测试代码:
def deal_game(poker, players):
poker.shuffle()
while poker.has_next:
for player in players:
player.get_one(poker.deal())
for player in players:
player.arrange()
print(f'{player.name}的手牌: {player.cards}')
players = [Player('东邪'), Player('西毒'), Player('南帝'), Player('北丐')]
game = Poker()
deal_game(game, players)
设计一个工资结算系统,包含三种类型的员工:部门经理、程序员和销售员。部门经理月薪固定,程序员按工作时间计薪,销售员月薪包括底薪和销售额提成。
首先是抽象基类Employee的定义:
from abc import ABCMeta, abstractmethod
class Employee(metaclass=ABCMeta):
""“员工(抽象类)”""
def __init__(self, name):
self.name = name
@abstractmethod
def get_salary(self):
""“结算月薪”""
pass
接下来是具体员工类的定义:
class Manager(Employee):
""“部门经理”""
def get_salary(self):
return 15000.0
class Programmer(Employee):
""“程序员”""
def __init__(self, name, working_hour=0):
super().__init__(name)
self.working_hour = working_hour
def get_salary(self):
return 200 * self.working_hour
class Salesman(Employee):
""“销售员”""
def __init__(self, name, sales=0):
super().__init__(name)
self.sales = sales
def get_salary(self):
return 1800 + 0.05 * self.sales
最后是工资结算系统的测试代码:
employees = [
Manager('刘备'), Programmer('诸葛亮'), Manager('曹操'),
Programmer('荀彧'), Salesman('吕布'), Programmer('张辽')
]
for emp in employees:
if isinstance(emp, Programmer):
emp.working_hour = int(input(f'请输入{emp.name}本月工作时间: '))
elif isinstance(emp, Salesman):
emp.sales = float(input(f'请输入{emp.name}本月销售额: '))
print(f'{emp.name}本月工资为: ¥{emp.get_salary():.2f}元')
面向对象编程是一种强大的编程范式,它通过模拟现实世界中的对象和它们之间的交互来简化复杂的编程任务。OOP的应用非常广泛,从桌面应用程序到大型企业系统,再到游戏和模拟软件,都可以看到OOP的身影。通过本篇文章探讨了理论知识,并结合了扑克游戏和工资结算系统的实际应用案例,展示了如何将OOP的概念应用于实际编程中。希望大家能够从中获得启发,并在自己的编程实践中运用面向对象编程的原则。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。