6、面向对象三大特性之三,多态,支持多种类型参数;
====> 原生多态
java:
string v = 'alex'
v = 'alex'
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:polymorphic.py
# time:2021/02/24
def func(arg):
print(arg)
func(1) #即可以是数字也可以是字符串
func('smoke')
/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/polymorphic.py
1
smoke
Process finished with exit code 0
c++:
def func(string arg):
print(arg)
func('alex') #只能写字符串
java:
class Foo:
pass
#声明func函数,函数只接受Foo类或Foo类的子类的对象
def func(Foo arg):
print(arg)
obj = Foo()
func(obj)
多态
class Foo:
pass
class Son(Foo):
pass
#声明func函数,函数只接受Foo类或Foo类的子类的对象
def func(Foo arg):
print(arg)
#obj = Foo()
obj = Son()
func(obj)
python:
def func(arg):
print(arg)
func(1)
func('alex')
练习:游戏人生程序
1、创建三个游戏人物,分别是:
苍井井,女,18,初始战斗力1000
东尼木木,男,20,初始战斗力1800
波多多,女,19,初始战斗力2500
2、游戏场景,分别:
草丛战斗,消耗200战斗力
自我修炼,增长100战斗力
多人游戏,消耗500战斗力
class Person:
def __init__(self,n,a,g,f):
self.name = n
self.age = a
self.gender = g
self.fight = f
role_list = []
y_n = input('是否创建角色?')
if y_n == 'y':
name = input('请输入名称')
age = input('请输入年龄')
...
role_list.append(Person(....))
# role_list,1,2
示例代码:
#!/usr/bin/env python3.8
# -*- coding: UTF-8 -*-
# __author:smoke
# file:polymorphic.py
# time:2021/02/24
############################ 定义实现功能的类 ###########################
class Person:
def __init__(self, na, gen, age, fig):
self.name = na
self.gender = gen
self.age = age
self.fight = fig
def grassland(self):
"""注释:草丛战斗,消耗200战斗力"""
self.fight = self.fight -200
def practice(self):
"""注释:自我修炼,增长100战斗力"""
self.fight = self.fight + 200
def incest(self):
"""注释:多人游戏,消耗500战斗力"""
self.fight = self.fight - 500
def detail(self):
"""注释:当前对象的详细情况"""
temp = "姓名:%s ; 性别: %s ; 年龄: %s ; 战斗力: %s" % (self.name, self.gender, self.age, self.fight)
print(temp)
# ########################### 开始游戏 ###########################
cang = Person('苍井井','女',18,1000) #创建苍井井角色
dong = Person('东尼木木','男','20',1800) #创建东尼木木角色
bo = Person('波多多','女',19,2500) #创建波多多角色
cang.incest() #苍井井参加一次多人游戏
dong.practice() #东尼木木自我修炼了一次
bo.grassland() #波多多参加一次草丛战斗
#输出当前所有人的详细情况
cang.detail()
dong.detail()
bo.detail()
/usr/bin/python3.8 /home/smoke/PycharmProjects/pythonProject/lean_python/polymorphic.py
姓名:苍井井 ; 性别: 女 ; 年龄: 18 ; 战斗力: 500
姓名:东尼木木 ; 性别: 男 ; 年龄: 20 ; 战斗力: 2000
姓名:波多多 ; 性别: 女 ; 年龄: 19 ; 战斗力: 2300
Process finished with exit code 0
浙公网安备 33010602011771号