inherit(继承)

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 所以打印 (,)

你可能感兴趣的:(inherit(继承))