赞
赏
继承是面向对象的三大特征之一,也是实现代码复用的重要手段。继承经常用于创建和现有 类 功能类似的新类,又或是新类只需要在现有类基础上添加一些 属性 和 方法,但又不想直接将现有类代码复制给新类。
Python 中,实现继承的类称为子类,被继承的类称为父类(也可称为基类、超类),子类继承父类的语法是:在定义子类时,将父类放在子类之后的圆括号里。
Python 中支持多继承,也就是一个类可以继承多个类,一个类继承多个类的语法是:在定义子类时,将多个父类一起放在子类之后的圆括号里,之间以逗号分隔,虽然 Python 支持多继承,但不推荐使用多继承,因为多继承大大增加了程序的复杂性。
如果在定义一个 Python 类时,并未显式指定这个类的直接父类,则这个类默认继承 object 类,也就是说 object 类是所有类的父类,要么是直接父类,要么是间接父类。
类继承是实现代码复用的重要手段,也就是说子类可以使用父类的属性和方法,子类不必自己再定义一套。
class ChildClass(SuperClass):
pass
定义了一个类 ChildClass,ChildClass 继承自 SuperClass。
class ChildClass(SuperClass, SuperClass2):
pass
定义了一个类 ChildClass,ChildClass 继承自 SuperClass 和 SuperClass2。
单继承,就是子类只继承一个父类
print("嗨客网(www.haicoder.net)")
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def info(self):
print("Name =", self.name, "Age =", self.age)
class Student(Person):
pass
stu = Student("HaiCoder", 18)
stu.info()
程序运行后,控制台输出如下:
我们定义了一个 Person 类,Person 类有两个属性,分别为 name 和 age 和一个 info 方法,用于输出 Person 类实例的 name 和 age 属性的值。
接着,我们定义了一个 Student 类,Student 类继承自 Person 类,Student 类本身没有任何的属性和方法,最后我们实例化了一个 Student 类,并且调用了 info 方法。
我们看到,程序成功输出了 Student 类实例 stu 的属性值。Student 类本身没有 name 和 age 属性,也没有 info 方法,但 Student 类从 Person 类继承了 name 和 age 属性,以及 info 方法。
多继承,就是子类继承多个父类
print("嗨客网(www.haicoder.net)")
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class Job:
def __init__(self, job, salary):
self.__job = job
self.__salary = salary
def setjob(self, val):
self.__job = val
def getjob(self):
return self.__job
job = property(getjob, setjob)
def setsalary(self, val):
self.__salary = val
def getsalary(self):
return self.__salary
salary = property(getsalary, setsalary)
class Teacher(Person, Job):
def info(self):
print("Name =", self.name, "Age =", self.age, "Job =", self.job, "Salary =", self.salary)
teacher = Teacher("HaiCoder", 18)
teacher.job = "Teach"
teacher.salary = 3500
teacher.info()
程序运行后,控制台输出如下:
我们定义了一个 Person 类,Person 类有两个属性,分别为 name 和 age 和一个 构造函数。接着,我们又定义了一个 Job 类,Job 类有两个属性,分别为 job 和 salary。
最后,我们定义了一个 Teacher 类,Teacher 类继承自 Person 类和 Job 类,并且自己只有一个 info 函数,用于输出 Teacher 类的实例信息。
在实例化 Teacher 时,我们设置了 Teacher 类的 name、age、job 和 salary 四个属性,同时调用了 info 方法输出了实例信息。 我们看到,程序成功输出了 Teacher 类实例 teacher 的属性值。
Teacher 类本身没有任何的属性,但是 Teacher 从 Person 类继承了 name 和 age 属性,从 Job 类继承了 job 和 salary 属性。
Python 中支持多继承,也就是一个类可以继承多个类,一个类继承多个类的语法是:在定义子类时,将多个父类一起放在子类之后的圆括号里,之间以逗号分隔,虽然 Python 支持多继承,但不推荐使用多继承,因为多继承大大增加了程序的复杂性。
如果在定义一个 Python 类时,并未显式指定这个类的直接父类,则这个类默认继承 object 类,也就是说 object 类是所有类的父类,要么是直接父类,要么是间接父类。Python 类单继承语法:
class ChildClass(SuperClass):
pass
Python 类多继承语法:
class ChildClass(SuperClass, SuperClass2):
pass