针对Python基础知识中的继承,我可以给出以下攻略:
一、继承的概念
继承是面向对象编程的重要概念之一,关于面向对象编程的解释可参考这里,而继承在其中的定义是指一个子类(派生类)从另一个类(基类)继承了部分属性和方法。子类可以使用父类中已经存在的方法或属性,也可以重载(override)它们,或新增自己的方法或属性。
二、Python中继承的实现
在Python中,继承的实现通过在类定义时把父类的名称放在类名之后加括号中实现,例如:
class Father:
def func(self):
print('This is father class.')
class Son(Father):
pass
son = Son()
son.func() # This is father class.
代码中的Son类继承自Father类,并在调用其func
方法时打印出字符串。
三、Python中多继承的实现
Python中允许一个子类同时继承自多个父类,这就是所谓的多继承,其实现方法与单继承类似:
class Father1:
def func1(self):
print('This is Father 1.')
class Father2:
def func2(self):
print('This is Father 2.')
class Son(Father1, Father2):
pass
son = Son()
son.func1() # This is father 1.
son.func2() # This is father 2.
上面的代码中,Son类同时继承自Father1和Father2两个父类,并调用了这两个类的方法。需要注意的是,当多个父类中存在同名的方法或属性时,子类继承时会继承排列靠前的父类中的方法或属性。
四、Python中继承的属性和方法重载
因为子类继承了父类中的方法或属性,所以子类可以通过重载(override)的方式来修改这些继承得到的方法或属性。例如:
class Father:
age = 40
def speak(self):
print('Father speaks.')
class Son(Father):
age = 20
def speak(self):
print('Son speaks.')
son = Son()
print(son.age) # 20
son.speak() # Son speaks.
代码中的Son类继承了Father类中的方法speak
和属性age
,然后通过自己的实现重载了这些方法和属性,这样一来,Son
的age
属性就变成了20,speak
方法的实现也发生了变化。
五、示例说明
继承在实际编程中的应用比较广泛,以下是两个示例:
示例一:简化类的实现
假设有一个程序经常使用同样的属性或方法,可能会定义多个这样功能相似的类。此时就可以使用继承来避免重复定义,简化程序的实现。例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def introduce(self):
print('My name is', self.name, ', and I am', self.age, 'years old.')
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
def introduce(self):
print('I am', self.name, ', a student of grade', self.grade, ', and I am', self.age, 'years old.')
class Teacher(Person):
def __init__(self, name, age, major):
super().__init__(name, age)
self.major = major
def introduce(self):
print('My name is', self.name, ', I am a teacher who majors in', self.major, ', and I am', self.age, 'years old.')
s = Student('Tom', 18, 3)
s.introduce() # I am Tom , a student of grade 3 , and I am 18 years old.
t = Teacher('Mary', 30, 'Math')
t.introduce() # My name is Mary , I am a teacher who majors in Math , and I am 30 years old.
p = Person('John', 40)
p.introduce() # My name is John , and I am 40 years old.
上面的代码中,Person
类定义了一个人类的基本属性和方法,而Student
和Teacher
类继承了Person
类,并在此基础上添加了自己的属性和方法。这样一来,Person
、Student
和Teacher
三个类就实现了绝大部分方法和属性的重用。
示例二:变量命名空间和继承
在Python中,继承除了常见的方法和属性的继承之外,还可以影响到类的变量命名空间(namespace)。具体来说,如果在子类中定义同名的变量或方法,这个定义会先在子类自己的命名空间中查找,默认情况下程序不会再去查找父类的同名方法或属性。
class Father:
age = 40
class Son(Father):
age = 20
print(Father.age) # 40
print(Son.age) # 20
上面的代码中,Father
和Son
类中都有age
属性,但是程序只会调用子类中的age
属性。此时如果想要调用父类中的age
属性可以通过super
函数实现:
class Father:
age = 40
class Son(Father):
age = 20
def print_age(self):
print(super().age)
s = Son()
s.print_age() # 40
上面的代码中,Son
类通过super
函数调用了父类Father
中的age
属性,并打印了其值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python基础知识学习之类的继承 - Python技术站