多态是面向对象编程中三大概念之三,它允许不同的对象对同一个消息作出不同的响应。
简单来说,多态是指同一个方法或操作符在不同的对象实例上可以有不同的行为。这意味着可以通过一个共同的接口或基类引用不同的子类对象,并根据实际的对象类型来调用相应的方法。
多态性在实际应用中提供了很多好处,包括:
简化代码:通过以相同的方式处理不同的对象,并使用统一的接口进行编程,可以降低代码的复杂性和重复性。
可维护性:多态可以提高代码的可维护性。当需要新增一种子类时,不需要修改已有的代码,只需要创建一个新的子类并继承父类,就能够在原有的代码基础上实现新的功能。
扩展性:由于多态允许在不修改已有的代码的情况下新增功能,因此可以更容易地对系统进行扩展和适应需求的变化。
多态性的实现通常通过继承和方法重写来实现。在继承关系中,子类可以重写父类的方法,在父类引用子类对象时,调用的实际上是子类重写后的方法。
# 中医
class Father:
def cure(self):
print("使用中医方法进行治疗。。。")
# 西医
class Son(Father):
def cure(self):
print("使用西医方法进行治疗。。。")
# 患者
class Patient:
def needDoctor(self, doctor):
doctor.cure()
if __name__ == '__main__':
oldDoctor = Father()
littleDoctor = Son()
patient = Patient()
patient.needDoctor(oldDoctor)
patient.needDoctor(littleDoctor)
鸭子类型(Duck Typing)是一种动态类型的概念,它源自于“走起来像鸭子、叫声像鸭子、看起来像鸭子,那么它就是鸭子”的观念。
在鸭子类型中,一个对象的适用性不是由它的类或接口决定,而是由它的方法和属性是否与所需的方法和属性匹配来决定。换句话说,只要一个对象具有特定方法和属性,我们就可以将其视为具有相同类型。
举个例子,如果我们需要一个能“叫”的对象,并且某个对象有一个名为quack()
的方法,那么我们可以将该对象视为一个“鸭子”,不管它实际上是什么类的对象。换句话说,我们关注的是对象的行为而不是其类型。
鸭子类型在动态语言中特别常见,比如 Python。在 Python 中,不需要显式地继承或实现接口,只要一个对象具有必需的方法和属性,它就可以被认为是某种类型。这使得 Python 具有灵活性和简洁性,可以更自由地处理不同类型的对象。
# 中医
class Father:
def cure(self):
print("使用中医方法进行治疗。。。")
# 西医
class Son(Father):
def cure(self):
print("使用西医方法进行治疗。。。")
# 兽医
class AnimalDoctor:
def cure(self):
print("使用兽医方法进行治疗。。。")
# 患者
class Patient:
def needDoctor(self, doctor):
doctor.cure()
if __name__ == '__main__':
oldDoctor = Father()
littleDoctor = Son()
animalDoctor = AnimalDoctor()
patient = Patient()
patient.needDoctor(oldDoctor)
patient.needDoctor(littleDoctor)
patient.needDoctor(animalDoctor)
鸭子类型通常是动态语言的特性,相比于静态类型语言,它在编译时没有类型检查。这意味着无法在编译阶段对类型不匹配或缺失方法和属性进行检测,可能会导致运行时错误。
Python 中提供了 isinstance()
和 issubclass()
两个函数,用来对数据进行检查判断。
Python 中使用 isinstance()
来检查一个实例的类型
格式:
isinstance(obj, type)
判断 obj 对象是否是 Type 指定类型或其父类类型的实例。
print(isinstance(littleDoctor, Father))
print(isinstance(littleDoctor, Son))
print(isinstance(littleDoctor, AnimalDoctor))
前面示例的代码可以进行优化:
# 患者
class Patient:
def needDoctor(self, doctor):
if isinstance(doctor, Father):
doctor.cure()
else:
print("此大夫医疗方法不适用病人。。。")
Python 中还可以使用 issubclass()
来检查类的继承关系。
格式:
issubclass(Type1, Type2)
判断 Type1 是否是 Type2 的子类
print(issubclass(Father, Father))
print(issubclass(Son, Father))
print(issubclass(AnimalDoctor, Father))
前面的示例也可优化为:
class Patient:
def needDoctor(self, doctor):
if issubclass(doctor.__class__, Father):
doctor.cure()
else:
print("此大夫医疗方法不适用病人。。。")
__class__
是一个魔法属性,用来获取当前实例对象的类。
在测试领域,技术的提升固然至关重要,然而,同样不可忽视的是测试管理软技能的必要性。拥有卓越的测试技术能力是基石,但在现代软件开发环境中,仅凭技术本身难以应对项目的复杂性和团队协作的挑战。测试管理软技能的提升可以为技术高工打开更广阔的发展空间。
首先,测试管理能力使你能够更好地规划、组织和执行测试策略。通过学习测试管理,你将能够更有效地制定测试计划、分配资源,并合理安排测试活动,从而提高项目的整体效率。
其次,软技能的提升将增强你在团队中的领导力和沟通能力。良好的测试管理者不仅能够理解技术细节,还能够与不同职能团队有效沟通,推动团队朝着共同的目标前进。这种全面的素养在职业发展中至关重要,有助于建立良好的团队协作氛围。
最后,测试管理软技能的提升有助于更好地理解业务需求和用户期望。通过深入了解项目的背景和目标,你将能够更有针对性地设计和执行测试,确保产品不仅在技术上优秀,还能够满足用户的期望,提升整体用户体验。
因此,作为技术高工,将精力投入到测试管理软技能的学习和提升中,不仅有助于个人职业发展,也将为团队和项目的成功贡献更大的价值。
霍格沃兹测试管理训练营是专门面向测试与质量管理人员的一门课程,通过提升从业人员的团队管理、项目管理、绩效管理、沟通管理等方面的能力,使测试管理人员可以更好的带领团队、项目以及公司获得更快的成长。提供 1v1 私教指导,BAT 级别的测试管理大咖量身打造职业规划,推荐大家了解~