写点什么

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

作者:测试人
  • 2023-05-22
    北京
  • 本文字数:1453 字

    阅读完需:约 5 分钟

本文为霍格沃兹测试开发学社学员笔记分享

原文链接: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)) # 将会打印 Trueprint(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
复制代码


发布于: 刚刚阅读数: 5
用户头像

测试人

关注

专注于软件测试开发 2022-08-29 加入

霍格沃兹测试开发学社,测试人社区:https://ceshiren.com/t/topic/22284

评论

发布
暂无评论
软件测试/测试开发丨Python学习笔记-继承与多态_Python_测试人_InfoQ写作社区