多态 不同的子类对象 调用相同的父类方法,产生不同的执行结果
1.多态可以增加代码的灵活度
2.以继承和重写父类方法为前提
3.是调用方法的技巧,不会影响到类的内部的设计
class Dog(object):
def __init__(self,name):
self.name = name
def game(self):
print("%s蹦蹦跳跳玩耍"% self.name)
class Xiaotianquan(Dog):
def game(self):
print("%s 飞到天上玩耍"% self.name)
class Person(object):
def __init__(self,name):
self.name = name
def game_with_dog(self,dogg):
print("%s 和 %s在快乐得玩耍"% (self.name,dogg.name))
dogg.game()
#1.创建狗对象
#wangcai = Dog("旺财")
wangcai = Xiaotianquan("飞天旺财")#只改变一行代码使得Person中的game作用不一样
#2.创建小明对象
xiaoming = Person("小明")
#3.让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)
#1.创建狗对象
wangcai = Dog("旺财")
#2.创建小明对象
xiaoming = Person("小明")
#3.让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)
结果:
小明 和 旺财在快乐得玩耍
旺财蹦蹦跳跳玩耍
类属性
类属性就是给类对象中定义的属性
通常用来纪录与这个类相关的特征
类属性不会用于记录具体对象的特征
需求:知道使用这个类,创建了多少个工具对象?
class Tool(object):
#使用赋值语句定义类属性,记录所有工具对象的数量
count = 0
def __init__(self,name):
self.name = name
#让类属性的值+1
Tool.count += 1
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("铁锹")
print(Tool.count)
类方法
需求:定义一个工具类;没见工具都有自己的name;在类封装一个show_tol_count的类方法,输出使用当前这个类,创建对对象个数
class Tool(object):
#使用赋值语句定义类属性,记录所有工具对象的数量
count = 0
@classmethod
def show_tool_count(cls):
print("工具对象的数量 %d" % cls.count)
def __init__(self,name):
self.name = name
#让类属性的值+1
Tool.count += 1
#创建工具对象
tool1 = Tool("斧头")
tool2 = Tool("榔头")
tool3 = Tool("铁锹")
Tool.show_tool_count()
print(Tool.count)