面向对象 基础知识

在python 中 面向对象是指一种编程思想 00P  面向对象编程。

 面向的对象:

一切皆对象(将现实中所有的需求、数组等都可以抽象成程序中的对象)

面向对象:Python,先有数据结构 在再有算法。

面向对象三大特性
    封装:类封装数据与操作方法
    继承:子类继承并且拥有父类的数据与操作
    多态:子类继承并且重写父类方法

面向对象“类”的概念

面向对象中类的概念是指将对象进行抽象, 不是具体化的内容,

比如人类  就属于一个 类

这个类里面还可以具体化成具体的某一个人 如“张三”

类的声明周期:

_ _ init _ _  初始化

_ _ del _ _清理销毁

python中类的编写方法,采用class 类名: 形式进行类的定义, 需注意类名中各个单词的首字母需大写。

初始化函数用来设置类的数据, 默认返回一个实例 self  下例中 name为增加的类的数据

class Person:
    """
    抽象的人类
    """

    def __init__(self, name):
        """
        初始化函数: 用于设置数据
        初始化函数 默认返回一个实例
        默认返回self
        不需要return
        """
        print("初始化函数执行了", name)
        self.name = name

    def __del__(self):
        """
        清理函数
        """
        print("清理函数执行了")
      定义一个具体的实例p1  p1变量(实例) 用于接受 初始化函数的返回值 (类名+()会执行初始化函数)
# p1 和 p2 都是实例
p1 = Person("张三")
print(p1.name)
p2 = Person("李四")
print(p2.name)

类与实例

可以将类理为 抽象的模板
实例则是由模板克隆出来的具体的内容。

比如下例 类型 “月饼”  月饼类 可以有种类 大小 价钱的数据

实例可以有五仁和蛋黄月饼  包括类型中的数据可以进行定义添加

class MoonCake:
    """
    月饼类
    """
    def __init__(self, tp, size, money):
        """
        初始化函数为了初始化 self的数据
        初始化函数默认返回self
        :param tp:
        """
        # print(f"可以得到一个类型为{tp}的月饼, 并且返回这个月饼")
        self.mat = tp
        self.sz = size
        self.my = money

    def show(self):
        """
        返回当前实例信息    谁调用self  self就是谁
        """
        return f"材料:\t{self.mat}, 尺寸:\t{self.sz}, 价格:\t{self.my}"


五仁月饼 = MoonCake("五仁", "大", 10)
print(五仁月饼.show())
蛋黄月饼 = MoonCake("蛋黄", "小", 50)
print(蛋黄月饼.show())

类的继承

封装:为了提升复用(为了减少代码编写)
类: 是将数据与操作进行封装
继承:为了减少代码的编写 通过父子类的继承关系 实现在子类中使用父类的功能,
子类继承父类  可以使用父类内容

例:父类 :人类    定义父类 功能 可以移动 

      子类: 张三       定义子类功能 可以飞

通过继续的使用  使子类 可以使用父类中的可以移动功能

子类并未定义  可以移动的功能  但使用继承功能后 可以得到父类中的 可以移动功能。

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

    def __str__(self):
        return self.name

    def move(self):
        print("可以移动")


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

    def __str__(self):
        return f"{self.name}  {self.age}"

    def fly(self):
        print("可以飞")


p1 = Person("张三")
print(p1)
p1.move()

sp1 = SuperPerson("张三", 20)
print(sp1)
sp1.move()
sp1.fly()

p1 结果:

张三  20
可以移动
可以飞

多继承

继承:在本类没有初始化函数 则去父类中找初始化函数
多继承:可以有多个父类
       类的__mro__属性可以获取其查找顺序
       多继承时,默认python3的深度优先  先找完一个分支以及所有子分支 在找另一个分支

设定三个父类:有同样的功能 move


class Walk:
    def move(self):
        print("走")


class Fly:
    def move(self):
        print("飞")


class Swimming:
    def move(self):
        print("游泳")

设定子类 技能 skill   继承父类 飞 和游泳

class Skill(Fly, Swimming):
    def move(self):
        print("技能")

 定义子类 人 继承父类 skill 和 walk

class Person(Skill, Walk):
    def move(self):
        print("人动")
运用 Print(Person.__mro__)  得到子类功能的查找顺序:

子类本身   -  父类 技能 - 飞  - 游泳  - 父类walk

(<class '__main__.Person'>, <class '__main__.Skill'>, <class '__main__.Fly'>, <class '__main__.Swimming'>, <class '__main__.Walk'>, <class 'object'>)

最终结果为 子类本身中的功能  move  人动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值