IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 面向对象的三大特征和父类方法重写 -> 正文阅读

[人工智能]面向对象的三大特征和父类方法重写

面向对象的三大特征:封装,继承,多态。

面向对象与语言无关,是一种编程思想。

封装

实现:将数据和方法包装到类对象中,在方法内部对属性进行操作,在类对象的外部调用方法

实例:车的品牌

class Car:
    def __init__(self, brand):
        self.brand = brand

    def start(self):
        print(self.brand + '汽车已启动')


c = Car('Toyota')
c.start()
print(c.brand)  # 此时调用了封装在Car中的方法

注:python中没有专门的修饰符用于属性的私有,如果不希望该属性在类对象的外部被访问,在前面加两个" _ "

class Car:
    def __init__(self, brand):
        self.__brand = brand    # 不希望在类的外部被使用

    def start(self):
        print(self.__brand + '汽车已启动')


c = Car('Toyota')
c.start()  # 调用start方法,所以能输出车牌
# print(c.brand)   # 直接访问报错,说没有此变量
print(c._Car__brand)   # 可以通过 _Car__brand 在类的外部进行访问

继承

  1. 如果一个类没有继承任何类,那么默认继承object
  2. Python支持多继承
  3. 定义子类时,必须在其构造函数中调用父类的构造函数

实例:创建学生和老师类,继承Person类

class Person(object):  # object可以不写
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print(self.name, self.age)


class Student(Person):  # 继承Person
    def __init__(self, name, age, stu_no):
        super().__init__(name, age)  # 调用父类的init方法
        self.stu_no = stu_no


class Teacher(Person):  # 继承Person
    def __init__(self, name, age, tea_year):
        super().__init__(name, age)  # 调用父类的init方法
        self.tea_year = tea_year


stu = Student('张三', 20, 1906100095)  # 创建学生类对象
tea = Teacher('李四', 39, 12)  # 创建老师类对象
stu.info()   # info方法就是从Person类中继承过来的
tea.info()

多继承:
请添加图片描述

class A(object):
    pass

class B(object):
    pass

class C(A, B):
    pass

方法重写

如果子类对继承自父类的某个属性或者方法不满意,可以在子类中对其进行重新编写
可以通过super.xxx( )调用被子类重写的方法

class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def info(self):
        print(self.name, self.age)


class Student(Person):
    def __init__(self, name, age, stu_no):
        super().__init__(name, age)  # 调用父类的init方法
        self.stu_no = stu_no


class Teacher(Person):
    def __init__(self, name, age, tea_year):
        super().__init__(name, age)  # 调用父类的init方法
        self.tea_year = tea_year


stu = Student('张三', 20, 1906100095)
tea = Teacher('李四', 39, 12)
stu.info()
tea.info()

上面的实例Student类和Teacher类调用Person中的info方法只能输出名字和年龄,不能输出自己新添加的(动态绑定)的属性。

下面重写了Student中的info方法,同理教师也是这种改法。

class Student(Person):
    def __init__(self, name, age, stu_no):
        super().__init__(name, age)  # 调用父类的init方法
        self.stu_no = stu_no

    def info(self):     # 重写:调用父类info,输出stu_no
        super().info()
        print(self.stu_no)

在重写的代码行旁边会有提醒重写了父类:请添加图片描述

多态

即便不知道一个变量所引用的对象到底是什么类型,仍然可以通过这个变量调用方法,在运行过程中根据变量所引用对象的类型,动态决定调用哪个对象中的方法。

class Animal:
    def eat(self):
        print('动物喜欢吃')


class Dog(Animal):
    def eat(self):
        print('狗喜欢吃骨头')


class Cat(Animal):
    def eat(self):
        print('猫喜欢吃鱼')


class Person:
    def eat(self):
        print('人类喜欢吃五谷杂粮')


# 定义一个函数
def fun(obj):
    obj.eat()


fun(Animal())
fun(Cat())
fun(Dog())
fun(Person())

上述代码中,fun(0)函数不管是Animal还是Cat和Dog和Person方法,都无区别的调用,只是因为它们都有eat()函数,这就是多态的体现

补充:
静态语言和动态语言关于多态的区别:
静态语言实现多态的三个必要条件:继承,方法,重写。父类引用指向子类对象,使用前必须明确继承关系。(例如java)
动态语言的多态只关心对象的行为是否相像,而不关心对象的其他属性不用关系Person是谁的子类,只要Person有eat()行为即可。(例如python)

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-26 10:10:08  更:2021-09-26 10:12:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:31:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码