1.类的继承

# 面向对象的特性 :封装,继承,多态
# 先有封装,才有继承
# 先有封装和继承,才有多态


# 1.类的继承
# 富二代 继承财产
# 定义类,不写括号,也继承基类object
class WashingMachine(object):  # 基类object

    width = 595
    height = 850

    def canDoLaundry(self):
        print('会洗衣服')

 

2.单继承

class Father:
    # f_money = 1000_0000_0000  # 一个下划线不影响数字
    _f_money = '一千亿'
    __title = '干饭第一人'  # 强制私有,不可以被继承


class Me(Father):  # 类Me继承类Father
    pass  # 保持结构的完整性 占位符
    # pass 和 ... 可互换


xiaoming = Me()
print(xiaoming._f_money)

 

3.多继承

# 3.多继承
# 注意继承的父类的顺序
# 当继承的多个父类中有相同的属性时,(根据继承的顺序找),Son.__mro__可以显示类Son继承的顺序
# 子类的该属性为第一个有该属性父类中该属性的值
# 从左到右

class Father:
    f_money = '一千亿'
    __title = '干饭第一人'  # 强制私有,不可以被继承
    character = '开朗'


class Mother:
    feather = '有一双漂亮的眼睛'
    character = '内向'


class Son(Father, Mother):  # 顺序是从左往右的
    pass


xiaoyu = Son()
print(xiaoyu.f_money)
print(xiaoyu.feather)
print(xiaoyu.character)  # 注意继承的哪个类的character
print(Son.__mro__)  # 显示继承的顺序
# (<class '__main__.Son'>, <class '__main__.Father'>, <class '__main__.Mother'>, <class 'object'>)

python中面向对象特性

 

 

4.子类重写父类的同名方法和属性

# 4.子类重写父类的同名方法和属性

class Father:
    character = '开朗'

    def ability(self):
        print('一个讲师,聪明过人')


class My(Father):  # 继承
    character = '内向'  # 重写 父类的属性

    def ability(self):  # 重写 父类的方法
        print('正常人')


xiaogang = My()
print(xiaogang.character)
xiaofang = My()
xiaofang.ability()

python中面向对象特性

 

 

5.子类调用父类的同名方法和属性

# 5.子类调用父类的同名方法和属性
# 子类里面需要使用到父类里面的方法
# 一般是在类外面通过子类的对象调用父类的方法
# 这个是在子类里面调用父类的方法

class Father:
    def ability(self):  # 平时的能力
        print('聪明过人')


class My(Father):  # 继承
    def hidden_bility(self):  #
        # 在需要的时候使用父类的方法或属性
        Father.ability(self)  # 需要使用的时候才会使用


xiaofang = My()
xiaofang.hidden_bility()

python中面向对象特性

 

 

6.super()

# 6.super() 超级
# 作用:调用父类的方法
# 和上一个相同,子类调用父类的同名方法和属性
#

class Father:
    def __init__(self, character):
        self.character = character

    def say(self):
        print(f'性格是{self.character}')


# father1 = Father('活泼')
# father1.say()

class Son(Father):
    def __init__(self, character):
        # Father.__init__(self, character)  # 等同于下一句
        super().__init__(character)


xiaoli = Son('666')
xiaoli.say()

python中面向对象特性

 

 

今日练习

# 今日练习
'''
1)用面向对象的形式编写一个老师类与学生类
老师有特征:id、姓名、性别、年龄、工资,
老师类中有功能可以去203教室、改作业。
学生有特征:id、姓名、性别、年龄、成绩,
学生类中有功能可以去203教室、完成作业。
2)要求写一个基础的类老师和学生类来继承他,
用于去除重复的特征和功能
'''


class Basement:
    """基础的类"""
    def __init__(self, id, name, gender, age):
        self.user_id = id
        self.user_name = name
        self.user_gender = gender
        self.user_age = age

    def func(self):
        print('去203教室')


class Teacher(Basement):
    """教师类"""
    def __init__(self, id, name, gender, age, wage):  # 传参要传完整!
        super().__init__(id, name, gender, age)  # 父类中所有属性
        self.wage = wage

    def func_t(self):
        print('改作业')


class Student(Basement):
    """学生类"""
    def __init__(self, id, name, gender, age, score):
        super().__init__(id, name, gender, age)
        self.score = score

    def func_s(self):
        print('完成作业')


teacher1 = Teacher(id=1, name='落落', gender='', age=44, wage=20000)
print(f'老师有特征:id={teacher1.user_id}、姓名={teacher1.user_name}、'
      f'性别={teacher1.user_gender}、年龄={teacher1.user_age}、工资={teacher1.wage}')
teacher1.func()
teacher1.func_t()

student1 = Student(id=11, name='是落落呀', gender='', age=20, score=100)
print(f'学生有特征:id={student1.user_id}、姓名={student1.user_name}、'
      f'性别={student1.user_gender}、年龄={student1.user_age}、成绩={student1.score}')
student1.func()
student1.func_s()

python中面向对象特性