美文网首页生活不易 我用pythonPython
面向对象——继承相关操作

面向对象——继承相关操作

作者: GHope | 来源:发表于2018-08-02 14:35 被阅读63次

重写

继承后,子类可以拥有除父类继承的内容以外的其它的内容
父类不能使用在子类中添加的内容

1、关于方法
a.在子类中可以直接添加其它的方法
b.重写:
1)完全重写
重新实现从父类继承下来的方法,重写后,子类再调用这个方法的时候,就调用子类的
2)保留父类实现的功能,在添加新的功能

对象和类调用方法的过程: 先看当前类是否存在这个方法,没有才看父类有没有这个方法,如果父类没有,就看父类的父类有没有,直到找到基类为止(object)。

class Animal:
    """动物类"""

    def __init__(self):
        self.age = 0
        self.color = 0

    def eat(self):
        print('吃东西!!!')

    def shout(self):
        print('发声!!!')

    @classmethod
    def get_number(cls):
        print(100)


class Dog(Animal):
    """
    犬类
    """

    def watchdog(self):
        print('看家')

    # 重写父类的shout
    def shout(self):
        print('汪汪汪~')

    # 重写父类eat方法
    def eat(self):
        # 保留父类eat的功能
        super().eat()
        print('吃骨头')

    @classmethod
    def get_number(cls):
        print(super().get_number())


if __name__ == '__main__':
    dog = Dog()
    dog.age = 3

添加属性

对象属性的继承:通过继承init方法来继承对象属性

给当前类添加对象属性:重写init方法。
注意:如果要保留父类的对象属性使用super()

多态:同一个事物有多种形态。子类继承父类的方法,就可以对方法进行重写,一个方法就有多种形态(多态的表现)

class Person:
    """人类"""

    def __init__(self, name, age=0):
        self.name = name
        self.age = age

    def eat(self):
        print('人在吃饭!')


class Staff(Person):
    """职工类"""

    # init方法的参数:保证在创建对象的时候就可以给某些属性赋值
    def __init__(self, name, age=0, salary=0):
        super().__init__(name, age),
        self.salary = salary

    def eat(self):
        print('职工在吃饭')


if __name__ == '__main__':
    s1 = Staff('Lucy', 22, 1000)
    print(s1.name)
# 练习
"""
声明人类:有属性:名字、年龄、性别、身高
要求创建人的时候可以给名字、性别、年龄赋初值

再创建学生类继承自人类,拥有人类的所有属性,再添加学号、成绩、电话属性
要求创建学生对象的时候可以给名字、年龄和电话赋初值
"""


class Person2:
    def __init__(self, name, age, sex=''):
        self.name = name
        self.age = age
        self.sex = sex
        self.height = 0


class Student(Person2):
    def __init__(self, name, age, phone):
        super().__init__(name, age=age)
        self.stu_id = 0
        self.score = 0
        self.phone = phone

重载

方法重载:一个类中可以有多个名字相同的方法,但是参数不一样,就叫重载。Python中不支持方法的重载,后面的会覆盖之前的。

class Student:
    # Python不支持方法的重载
    # def run(self):
    #     print('人在跑')

    def run(self, name):
        print("%s在跑" % name)


"""
运算符重载:
>、<
大于和小于符号只需要重载其中的一个,另外一个的结果,直接就是对重载所得到结果的取反的结果

+
"""


class Studen2:
    def __init__(self, name='', age=0, height=0):
        self.name = name
        self.age = age
        self.height = height

    # 重载:>
    """
    self > other
    """

    def __gt__(self, other):
        # 比较对象1>对象2的时候是比较他们的指定属性
        return self.height > other.height

    # 重载:<
    def __lt__(self, other):
        return self.age < other.age

    # 重载+
    def __add__(self, other):
        return self.age + other.age

    # 重载-
    def __sub__(self, other):
        return self.height - other.height


if __name__ == '__main__':
    s1 = Student()
    s1.run('Lisa')

    stu1 = Studen2('Bark', 16, 160)
    stu2 = Studen2('Raise', 23, 170)

    if stu1 < stu2:
        print('===')

相关文章

  • 面向对象——继承相关操作

    重写 继承后,子类可以拥有除父类继承的内容以外的其它的内容父类不能使用在子类中添加的内容 1、关于方法a.在子类中...

  • 菜鸟学习javascript10

    12javascript对象 1.基于对象的操作方式(面向对象封装、继承、多态) 2.将相关的操作使用一个对象完成...

  • JavaScript高级

    1 面向对象操作 - 回顾对象的基本概念 - 面向对象的相关概念 - 面向对象的特征和操作的实现方式 - 小练习 ...

  • Javascript——面向对象程序设计和继承

    Javascript——面向对象程序设计和继承 面向对象设计模式 创建对象——单个对象 字符字变量 new 操作符...

  • Python基础语法——面向对象(下)

    面向对象三大思想:封装、继承、多态。 可参考一些优质文章: 关于面向对象的相关理解解释: 面向对象基础 装饰器、类...

  • JavaScript之面向对象编程

    五、面向对象编程 目录:面向对象原型继承、面向对象class继承(ES6引入的) 1.面向对象原型继承 类:模板 ...

  • 22.Python编程:封装、继承、多态

    前面学习了面向过程和面向对象的概念,又学习了Python中类和对象的相关知识,其中面向对象最大的特征是:封装、继承...

  • 王艳华Pythonday03

    Python的面向对象 Java 面向对象 继承

  • OC语言基本概念

    基本概念 oc面向对象语言,只需关注具有相关功能的对象,不必亲力亲为。 oc面向对象的三大特性:封装、继承(拷贝一...

  • Python面向对象继承

    面向对象继承 面向对象编程 (OOP),英语全称:Object Oriented Programming,面向对象...

网友评论

    本文标题:面向对象——继承相关操作

    本文链接:https://www.haomeiwen.com/subject/kjajvftx.html