1.什么是继承:
让子类直接拥有父类所有的属性和方法
父类 - 被继承者
子类 - 继承者
python中所有的类嗾使直接或者间接的继承object这个类
2.怎么继承:
class 子类名(父类1,父类2,...):
类的内容
3. 子类中添加内容
- 添加字段和方法,直接添加
class Person(object):
number = 61 # 字段
def __init__(self,name,age=0,gender="男"):
self.name = name
self.age = age
self.gender = gender
self.__num = "0001" # 这是一个默认属性,有默认值"0001"
def fun1(self):
print("Person的对象方法:", self.name)
@classmethod # 定义类方法前要加一个名为@classmethod的装饰器
def func2(cls):
print("cls.number")
@staticmethod # 定义静态方法前要加一个名为@staticmethod的装饰器
def func3(): # 静态方法没有默认参数
print("func3")
class Student(Person): # 定义一个Student的类,并且继承Person这个类
flag = "学生!"
def __init__(self,name):
super().__init__(name) # 在子类中重写父类中有的方法时,会覆盖父类的方法,所有需要用super().的方式来重写,就不会覆盖
self.study_id = "stu001" # Student类的__init__中,除了拥有父类的属性以外,还有额外的属性 self.study_id 默认值是 "stu001"
def fun1(self):
super().fun1() # 子类对象调用fun1方法时,在父类的fun1方法的基础上还有额外的东西 (因为用super()重写了,如果不重写,那么子类对象调用fun1方法的时候只有子类的fun1方法的内容(父类中fun1的内容会被覆盖))
print("子类的func1")
def study(self):
print("%s在学习" % self.name)
stu = Student('小花')
print(stu.__dict__) # {'name': '小花', 'age': 0, 'gender': '男', '_Person__num': '0001', 'study_id': 'stu001'}
# 使用父类继承下来的属性和方法
print(Student.number) # 61
print(stu.name) # 小花
stu.fun1() # Person对象方法: 小花 --(父类的fun1方法)
子类的,func1 --(子类的fun1方法)
Student.func2() # 61 继承的父类的func2 所以是61
Student.func3() # func3 继承的父类的func3 方法
# 使用自己的属性和方法
print(Student.flag) # 学生!
stu.study() # 小花在学习
print(Person.__bases__) #
__bases__ 查看当前类的父类 Person的父类是object 所以打印 (<class 'object'>,)