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