多态案例演练
class Dog(object):
def __init__(self, name):
self.name = name
def game(self):
print("%s 蹦蹦跳跳的玩耍" % self.name)
class XiaoTianDog(Dog):
def game(self):
print("%s 飞到天上去玩耍" % self.name)
class Person(object):
def __init__(self, name):
self.name = name
def game_with_dog(self, dog):
print("%s 和 %s 快乐的玩耍" % (self.name, dog.name))
# 让狗玩耍 - 父类中定义
dog.game()
# 1、创建一个狗对象
# wangcai = Dog("旺财")
wangcai = XiaoTianDog("飞天旺财")
# 2、创建一个小明对象
xiaoming = Person("小明")
# 3、让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)
类的结构
实例化
1、对象\ 类的实例、创建对象的动作\ 实例化、对象的属性\ 实例属性、对象调用的方法\ 实例方法。
2、每一个对象都有自己独立的内存空间,保存各自不同的属性。
3、多个对象的方法,在内存中只有一份,在调用方法时,需要把对象的引用传递到方法内部。
类是一个特殊的对象
类属性和实例属性
概念和使用
class Tool(object):
# 使用赋值语句来定义类属性,记录所有工具对象的数量
count = 0
def __init__(self, name):
self.name = name
# 让类属性的值+1
Tool.count += 1
# 1、创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("水桶")
# 2、输出工具对象的总数
print(Tool.count)
属性的获取机制
类名.类属性、对象.类属性
对象.类属性 = 值: 只会给对象添加一个属性,不会影响到类属性的值
class Tool(object):
# 使用赋值语句来定义类属性,记录所有工具对象的数量
count = 0
def __init__(self, name):
self.name = name
# 让类属性的值+1
Tool.count += 1
# 1、创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("水桶")
# 2、输出工具对象的总数
# print(Tool.count)
print("工具对象总数 %d" % tool1.count)
class Tool(object):
# 使用赋值语句来定义类属性,记录所有工具对象的数量
count = 0
def __init__(self, name):
self.name = name
# 让类属性的值+1
Tool.count += 1
# 1、创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("水桶")
# 2、输出工具对象的总数
tool3.count = 99
print("工具对象总数 %d" % tool3.count)
print("===> %d" % Tool.count)
类方法和静态方法
类方法
类名.类方法
class Tool(object):
# 使用赋值语句来定义类属性,记录所有工具对象的数量
count = 0
def __init__(self, name):
self.name = name
# 让类属性的值+1
Tool.count += 1
@classmethod
def show_tool_count(cls):
print("工具对象的数量 %d" % cls.count)
# 1、创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
# 2、调用类方法
Tool.show_tool_count()
静态方法
类名.静态方法
class Dog(object):
@staticmethod
def run():
# 不访问实例属性/类属性
print("小狗要跑")
# 通过类名,调用静态方法 - 不需要创建对象,不需要传递参数
Dog.run()
方法综合案例
class Game(object):
# 历史最高分
top_score = 0
def __init__(self, player_name):
self.player_name = player_name
@staticmethod
def show_help():
print("帮助信息,让僵尸进入大门")
@classmethod
def show_top_score(cls):
print("历史记录 %d" % cls.top_score)
def start_game(self):
print("%s 开始游戏啦" % self.player_name)
# 1、查看游戏的帮助信息
Game.show_help()
# 2、查看历史最高分
Game.show_top_score()
# 3、创建游戏对象
game = Game("小明")
game.start_game()