1.继承
1.1 什么是继承
让子类直接拥有父类的属性和方法的过程就是继承
父类 - 被继承者(又叫超类)
子类 - 继承者
1.2 怎么继承
class 类名(父类1,父类2,…):
类的说明文档
类的内容
注意: 默认情况下,定义的类继承自 object
class Person:
num = 61
def __init__(self):
print('Person中init')
self.name = '小明'
self.age = 18
self.gender = '男'
self.__sex = '女'
def eat(self):
print(f'Person:{self.name}在吃饭')
@classmethod
def show_num(cls):
print(f'人类的数量:{cls.num}')
@staticmethod
def func1():
print('人类破坏环境!')
让 Student(子类) 继承 Person(父类)
class Student(Person):
pass
继承的时候子类可以直接拥有父类所有的属性和方法
print(Student.num)
stu = Student()
print(stu.name, stu.age, stu.gender) # 小明 18 男
stu.eat() # Person:小明在吃饭
Student.show_num() # 人类的数量:61
Student.func1() # 人类破坏环境!
print(stu.__dict__) # {'name': '小明', 'age': 18, 'gender': '男', '_Person__sex': '女'}
1.3.在子类中添加内容
1)在子类中添加类属性和方法
类属性和方法的添加不会因为继承而收到任何影响
- 添加对象属性
对象属性是怎么被继承:继承的时候因为init方法被继承,间接继承了对象属性
在子类的__init__方法中通过 super()去调用父类的__init__方法
类中的方法的调用过程(重要):
通过类或者对象在调用方法的时候,会先看当前类中有没有这个方法,如果有就直接调用自己类中的方法;没有就看父类中有没有定义这个方法,如果父类定义了就调用父类的;父类没有定义,就看父类的父类中有没有定义…以此类推,如果 object 中没有定义才会报错!
例1:
class Teacher(Person):
title = '老师'
def __init__(self):
# 调用父类的init方法
super().__init__()
self.school = '千锋'
self.subject = 'Python'
self.tea_id = '001'
def attend_class(self):
print('老师上课')
def eat(self):
super().eat()
print(f'老师在吃饭')
print(Teacher.num, Teacher.title)
t1 = Teacher()
t1.attend_class()
print(t1.school, t1.subject, t1.tea_id)
print(t1.name)
t1.eat()
例2:
class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age
def eat(self, food):
print(self.name