人工智能入门------Python面向对象

相关概念

Python作为一门面向对象的编程语言,它跟其它的面向对象的编程语言一样也具有类的特性

  • 类(class):用来描述具有相同的属性和方法的对象的集合,它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
  • 实例变量:定义在方法中的变量,只作用于当前实例的类
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据
  • 方法重载:如果从父类继承的方法不能满足子类,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重载。
  • 继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟“是一个(is-a)”关系
  • 实例化:创建一个类的实例,类的具体对象。
  • 方法:类中定义的函数
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法

一、创建类

class ClassName:
	'类的帮助信息'    # 类文档字符串
	class_suite         # 类体
	
  • 类的帮助信息可以通过ClassName.__doc__查看
  • class_suite 由类成员,方法,数据属性组成。
    在这里插入图片描述
  • self 代表类的实例,而非类
  • 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,按照惯例它的名称是self。
    在这里插入图片描述

二、创建实例对象

要创建一个类的实例,你可以使用类的名称,并通过__init()__方法接受参数。
在这里插入图片描述
类名加括号就是实例化,会自动触发__init__函数的运行,可以用它来为每个实例定制自己的特征

三、成员访问

  1. 使用点(.)来访问对象的属性
    在这里插入图片描述
  2. 可以添加、删除、修改类的属性
    在这里插入图片描述
  3. Python内置类属性
    1. dict:类的属性(包含一个字典,由类的数据属性组成)
    2. doc:类的文档字符串
    3. name:类名
    4. module:类定义所在的模块(类的全名是’main.className’,如果类位于一个导入模块mymod中,那么className.__module__等于mymod)
    5. bases:类的所有父类构成元素(包含以所有父类组成的元组)
      内置类属性调用实例如下:
      在这里插入图片描述
  4. 类的销毁
    同Java语言一样,Python使用了引用计数这一简单技术来追踪内存中的对象。
    在Python内部记录着所有使用中的对象各有多少引用。
    一个内部跟踪变量,称为一个引用计数器。
    当对象被创建时,就创建了一个引用计数,当这个对象不再需要时,也就是说,这个对象的引用计数变为0时,它被垃圾回收。但是回收不时“立即”的,由解释器在适当的时机,将垃圾对象占用的内存空间回收。
    析构函数__del__,__del__在对象消逝的时候被调用,当对象不再被使用时,__del__方法运行

在这里插入图片描述

四、类的继承

  • 面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。
  • 基本格式:
class SubClassName(ParentClass1,ParenClass2...):
	Optional class documentation string
	class_suite
  • Python与Java不同的是它还允许多重继承
    在这里插入图片描述

一、方法重写

如果父类方法的功能不能满足你的需求,你可以在子类重写父类的方法:
在这里插入图片描述

五、类的属性方法

  1. 类的私有属性
    private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用是self.private_attrs
  2. 类的方法
    在类的内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数
  3. 单下划线、双下划线、头尾双下划线说明:
  • foo:定义的是特殊方法,一般是系统定义名字,类似init()之类的
  • _foo:以单下划线开头的表示是protected类型的变量,这个在Java中也有,即保护类型只能允许其本身与子类进行访问,不能用于from modele import *
  • __foo:双下划线的表示的是私有类型(private)的变量,只能是允许这个类本身进行访问了。
  1. 类的静态方法和类方法
    Python 中的实例方法由实例调用,且隐含传入的self参数为实例本身。而静态方法在类中定义,无需参数,直接由类调用。类方法由实例调用,传入的参数为类本身,通常用cls作为参数名字。本关的任务是让学习者掌握静态方法与类方法的声明与使用。
    用@staticmethod、@classmethod装饰,这让我想起了javaweb开发框架的注解开发
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
发布了32 篇原创文章 · 获赞 15 · 访问量 2458

猜你喜欢

转载自blog.csdn.net/weixin_44350891/article/details/105001980
今日推荐