首页 > 编程 > Python > 正文

Python类的继承和多态代码详解

2020-02-16 11:21:04
字体:
来源:转载
供稿:网友

Python类的继承

在OOP(ObjectOrientedProgramming)程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类、父类或超类(Baseclass、Superclass)。

我们先来定义一个classPerson,表示人,定义属性变量name及sex(姓名和性别);

定义一个方法print_title():当sex是male时,printman;当sex是female时,printwoman。参考如下代码:

class Person(object):  def __init__(self,name,sex):    self.name = name    self.sex = sex      def print_title(self):    if self.sex == "male":      print("man")    elif self.sex == "female":      print("woman")class Child(Person):              # Child 继承 Person  pass      May = Child("May","female")Peter = Person("Peter","male")print(May.name,May.sex,Peter.name,Peter.sex)  # 子类继承父类方法及属性May.print_title()Peter.print_title()

而我们编写Child类,完全可以继承Person类(Child就是Person);使用classsubclass_name(baseclass_name)来表示继承;

继承有什么好处?最大的好处是子类获得了父类的全部属性及功能。如下Child类就可以直接使用父类的print_title()方法

实例化Child的时候,子类继承了父类的构造函数,就需要提供父类Person要求的两个属性变量name及sex:

在继承关系中,如果一个实例的数据类型是某个子类,那它也可以被看做是父类(May既是Child又是Person)。但是,反过来就不行(Peter仅是Person,而不是Child)。

继承还可以一级一级地继承下来,就好比从爷爷到爸爸、再到儿子这样的关系。而任何类,最终都可以追溯到根类object,这些继承关系看上去就像一颗倒着的树。比如如下的继承树:

isinstance()及issubclass()

Python与其他语言不同点在于,当我们定义一个class的时候,我们实际上就定义了一种数据类型。我们定义的数据类型和Python自带的数据类型,比如str、list、dict没什么两样。

Python有两个判断继承的函数:isinstance()用于检查实例类型;issubclass()用于检查类继承。参见下方示例:

class Person(object):  passclass Child(Person):         # Child 继承 Person  passMay = Child()Peter = Person()  print(isinstance(May,Child))     # Trueprint(isinstance(May,Person))    # Trueprint(isinstance(Peter,Child))    # Falseprint(isinstance(Peter,Person))   # Trueprint(issubclass(Child,Person))   # True

Python类的多态

在说明多态是什么之前,我们在Child类中重写print_title()方法:若为male,printboy;若为female,printgirl

class Person(object):  def __init__(self,name,sex):    self.name = name    self.sex = sex      def print_title(self):    if self.sex == "male":      print("man")    elif self.sex == "female":      print("woman")class Child(Person):        # Child 继承 Person  def print_title(self):    if self.sex == "male":      print("boy")    elif self.sex == "female":      print("girl")    May = Child("May","female")Peter = Person("Peter","male")print(May.name,May.sex,Peter.name,Peter.sex)May.print_title()Peter.print_title()            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表