前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 中关于面向对象的相关知识

Python 中关于面向对象的相关知识

作者头像
村雨遥
发布2022-06-15 09:21:43
3680
发布2022-06-15 09:21:43
举报
文章被收录于专栏:JavaPark

面向对象特点

  • 注重对象与职责,不同对象,不同职责;
  • 应对复杂项目开发,提供固定模版;
  • 基于面向过程;
  • 封装:根据功能将属性和方法封装到一个抽象的类中;
  • 继承:实现代码复用,相同代码不需多次编写;
  • 多态:不同对象调用相同方法得出不同结果,增加了代码的灵活度;

对象

类创建出来的一个具体存在,可直接使用,拥有类所具有的属性与方法;

类与对象的关系

  • 类是模版,对象根据类创建而出,先有类再有对象;
  • 类只有一个,但对象可以有多个;
  • 类中定义属性与方法,对象中只能具有所创建而出的类所具有的属性与方法;

类的设计三要素

  • 类名:一般满足大驼峰命名法;
  • 属性:一类事物所具有的特征;
  • 方法:一类事物所具有的行为;

添加类的属性

  • 在创建类之后,对象可以在外部直接使用.属性名 给对象增加属性,但是这种方式不推荐使用,因为它并没有将属性封装到类的内部中,只是对象临时的属性;
  • 在初始化方法内部定义属性之后,在使用该类创建新对象时,所创建的新对象都会拥有该属性,使用方法:self.属性名 = 属性初始值

对象及内置方法生命周期

方法

功能

__init_

初始化对象并设置属性

__del_

销毁对象

__str_

必须返回一个字符串,定制变量的输出信息

  • 对象从调用类名()创建时生命周期即开始;
  • 对象生命周期内,既可以访问对象属性,也可以调用对象方法;
  • 对象的__del__方法一旦调用,对象的生命周期即结束;

身份运算符

  • 功能:用于比较两个对象内存地址是否一致–即判断是否是对同一对象的引用;
  • is==的区别
    • is用于判断两个变量引用对象是否为同一个;
    • ==用于判断引用变量的值是否相等;

私有属性与方法

  • 定义方式:属性名或方法名之前增加两个下划线,则定义的属性或方法就是私有属性或方法;
  • 特点:在对象方法外部是不能直接访问的,只有在方法内部才能够访问;
  • 子类对象不能直接访问父类私有属性或私有方法,但可以通过父类的公有方法间接访问私有属性或私有方法;

伪私有属性与方法

  • 对于定义的私有属性与方法,通过_类名__名称的方式即可访问,所以说私有属性或方法并非真正意义的私有,而是内部通过特殊处理伪装起来使得外界无法访问的。虽然私有属性或方法我们都可以访问,但日常开发中最好不要使用这种方式来访问私有属性或方法;

注意

  • 内置函数__str__必须返回一个字符串;
  • 对象的方法内部,可以直接访问对象属性;
  • 对于多个对象之间,各自的属性是互不干扰的;

继承

  • 语法
代码语言:javascript
复制
class A(B):
	pass
  • 子类继承于父类,拥有父类所封装的属性与方法,无需二次开发;
  • 子类只需要封装属于自己特有的,有别于父类的属性与方法即可;
  • 特性:传递性;
  • 方法重写:
    • 覆盖基类方法;
    • 对基类方法进行拓展,需要使用super().父类方法来调用父类方法的执行,然后在方法中其他位置进行对子类方法的扩展;

多继承

  • 语法
代码语言:javascript
复制
class 子类名(父类名1, 父类名2,...):
	pass
  • 注意事项
    • 父类名应该避免重复;
    • 不同父类中的属性或方法应该避免同名;

新式类与经典类

  • 新式类
代码语言:javascript
复制
class A(object):
    pass
  • 经典类
代码语言:javascript
复制
class A:
    pass

实例化

  • 每个对象实例化是都有自己独立的内存空间,用于保存各自不同的属性;
  • 而多个对象的方法在内存中只有一份,在调用方法时需要吧对象的引用传递到方法内部;

类方法

  • 语法
代码语言:javascript
复制
@classmethod
def 类方法名(cls):
    pass
  • 在类方法内部
    • 通过cls.访问类的属性;
    • 通过cls.调用其他类方法;

静态方法

  • 需要封装为静态方法的情况:
    • 无需访问实例属性或实例方法;
    • 无需访问类属性或类方法;
  • 语法
代码语言:javascript
复制
@staticmethod
def 静态方法名():
    pass

实例方法、类方法、静态方法之间的区别

  • 实例方法:方法内部需要访问实例属性,实例方法内部需使用类名.访问类属性;
  • 类方法:方法内部只需要访问类属性
  • 静态方法:方法内部不需访问实例属性类属性
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 面向对象特点
  • 对象
  • 类与对象的关系
  • 类的设计三要素
  • 添加类的属性
  • 对象及内置方法生命周期
  • 身份运算符
  • 私有属性与方法
  • 伪私有属性与方法
  • 注意
  • 继承
  • 多继承
  • 新式类与经典类
  • 实例化
  • 类方法
  • 静态方法
  • 实例方法、类方法、静态方法之间的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档