软件测试/测试开发丨Python学习笔记-继承与多态

本文为霍格沃兹测试开发学社学员笔记分享
原文链接:https://ceshiren.com/t/topic/24542

继承的概念

  • 继承(Inheritance

    • 复用父类的公开属性和方法
    • 拓展出新的属性和方法

继承的实现

  • 语法:class 类名(父类列表)
  • 默认父类是 object
  • Python 支持多继承
# inheritance_demo.py

class Human:
    """人类"""

    # 类属性
    message = "这是Human的类属性"

    # 构造方法
    def __init__(self, name, age):
        # 实例属性
        self.name = name
        self.age = age

    # 实例方法
    def live(self):
        print("住在地球上")


class Student(Human):
    """学生类"""

    def study(self):
        print("正在学习")


# 实例化子类对象
stu = Student("哈利波特", 12)
# 访问类属性(继承)
print(stu.message)
# 访问实例属性(继承)
print(stu.name, stu.age)
# 访问实例方法(继承)
stu.live()
# 访问实例方法(扩展)
stu.study()

类型检查

  • isinstance(实例, 类名)

    • 检查对象是否是某个类及其派生类的实例
  • issubclass(类名1, 类名2)

    • 检查类名 1 是否是类名 2 的子类
# relation_demo.py

# 人类
class Human:
    pass

# 学生类
class Student(Human):
    pass

# 老师类
class Teacher(Human):
    pass

# 检查实例与类的关系
stu = Student()
print(isinstance(stu, Human))  # 将会打印 True

# 检查类与类的关系
print(issubclass(Student, Human))  # 将会打印 True
print(issubclass(Student, Teacher))  # 将会打印 False

多态的概念

  • 多态(Polymorphism

    • 同名方法呈现多种行为

运算符的多态表现

  • +

    • 加法:数字+数字
    • 拼接:字符串+字符串
    • 合并:列表+列表
# 加法:数字+数字
print(1 + 1)  # 打印 2

# 拼接:字符串+字符串
print("Hello" + "World")  # 打印 Hello World

# 合并:列表+列表
print([1, 2] + [3])  # 打印 [1, 2, 3]

函数的多态表现

  • len()函数

    • 可以接收字符串
    • 可以接收列表
# 参数是字符串
print(len("Hogwarts"))

# 参数是列表
print(len([1, 3, 5]))

方法的多态表现

  • 同名变量调用同名方法呈现多种行为
# poly_method.py

class China:
    def speak(self):
        print("汉语")

class Usa:
    def speak(self):
        print("英语")

# 实例化对象
cn = China()
us = Usa()

for x in (cn, us):
    # 同一个变量在调用同名方法时,呈现不同的行为
    # 具体呈现哪种行为,由该变量所引用的对象决定
    x.speak()

多态与继承

  • 方法重写(Override):子类的方法名称与父类的相同

  • 重写构造方法

    • super().__init__()
    • 父类名.__init__(self)
# override_demo.py

class Human:
    """人类"""

    message = "这是Human的类属性"

    # 构造方法
    def __init__(self, name, age):
        # 实例属性
        self.name = name
        self.age = age

    # 实例方法
    def live(self):
        print(f"住在地球上")


class Student(Human):
    """学生类"""

    # 重写父类的构造方法
    def __init__(self, name, age, school):
        # 访问父类的构造方法
        super().__init__(name, age)
        # super(Student, self).__init__(name, age)
        # Human.__init__(self, name, age)
        # 子类实例属性(个性)
        self.school = school

    # 重写父类的实例方法
    def live(self):
        print(f"住在{self.school}")


# 实例化子类对象
stu = Student("哈利波特", 12, "Hogwarts")

# 访问实例方法
stu.live()  # 将会打印 住在Hogwarts
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值