Python类的定义_类和对象的关系_对象的内存模型

一、类的定义

Python类的定义_类和对象的关系_对象的内存模型_第1张图片

类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。我们要造一个汽车,怎么样造?类就是这个图纸,规定了汽车的详细信息,然后根据图纸将汽车造出来。

类:我们叫做class。 对象:我们叫做object,instance(实例)。以后我们说某个类的对象,某个类的实例。是一样的意思。

我们把对象比作一个“饼干”,类就是制造这个饼干的“模具”。

Python类的定义_类和对象的关系_对象的内存模型_第2张图片

Python类的定义_类和对象的关系_对象的内存模型_第3张图片

二、属性和方法

我们通过类定义数据类型的属性(数据)和方法(行为),也就是说,“类将行为和状态打包在一起”。

Python类的定义_类和对象的关系_对象的内存模型_第4张图片

Python类的定义_类和对象的关系_对象的内存模型_第5张图片

对象是类的具体实体,一般称为“类的实例”。类看做“饼干模具”,对象就是根据这个“模具”制造出的“饼干”。

从一个类创建对象时,每个对象会共享这个类的行为(类中定义的方法),但会有自己的属性值(不共享状态)。更具体一点:“方法代码是共享的,属性数据不共享”。

Python类的定义_类和对象的关系_对象的内存模型_第6张图片

❤️Python中,“一切皆对象”。类也称为“类对象”,类的实例也称为“实例对象”。

定义类的语法格式如下:

class 类名:
    类体

要点如下:

  1. 类名必须符合“标识符”的规则;一般规定,首字母大写,多个单词使用“驼峰原则”。
  2. 类体中我们可以定义属性和方法
  3. 属性用来描述数据,方法(即函数)用来描述这些数据相关的操作

【操作】一个典型的类的定义

class Student:
  def __init__(self,name,score): #构造方法第一个参数必须为self
    self.name = name     #实例属性
    self.score = score
​
  def say_score(self):      #实例方法
    print("{0}的分数是{1}".format(self.name,self.score))
​
s1 = Student('张三',80) #s1是实例对象,自动调用__init__()方法
s1.say_score()

pass为空语句。就是表示什么都不做,只是作为一个占位符存在。当你写代码时,遇到暂时不知道往方法或者类中加入什么时,可以先用pass占位,后期再补上。

Python类的定义_类和对象的关系_对象的内存模型_第7张图片

三、对象完整内存结构

类是抽象的,也称之为“对象的模板”。我们需要通过类这个模板,创建类的实例对象,然后才能使用类定义的功能。

我们前面说过一个Python对象包含三个部分:id(identity识别码)、type(对象类型)、value(对象的值)。

现在,我们可以更进一步的说,一个Python对象包含如下部分:

Python类的定义_类和对象的关系_对象的内存模型_第8张图片

四、__init__构造方法和__new__方法

初始化对象,我们需要定义构造函数__init__()方法。构造方法用于执行“实例对象的初始化工作”,即对象创建后,初始化当前对象的相关属性,无返回值。

Python类的定义_类和对象的关系_对象的内存模型_第9张图片

构造方法是负责初始化(装修),不是建对象(房子)

__init__()的要点如下:

❤️Python中的self相当于C++中的self指针,JAVA和C#中的this关键字。Python中,self必须为构造函数的第一个参数,名字可以任意修改。但一般惯例,都叫做self

Python类的定义_类和对象的关系_对象的内存模型_第10张图片

  1. 名称固定,必须为:__init__()

  2. 第一个参数固定,必须为:self。 self指的就是刚刚创建好的实例对象

  3. 构造函数通常用来初始化实例对象的实例属性,如下代码就是初始化实例属性:namescore

      def __init__(self,name,score):
        self.name = name     #实例属性
        self.score = score
    

  4. 通过“类名(参数列表)”来调用构造函数。调用后,将创建好的对象返回给相应的变量。 比如:s1 = Student('张三', 80)

  5. __init__()方法:初始化创建好的对象,初始化指的是:“给实例属性赋值”

  6. __new__()方法: 用于创建对象,但我们一般无需重定义该方法

  7. 如果我们不定义__init__方法,系统会提供一个默认的__init__方法。如果我们定义了带参的__init__方法,系统不创建默认的__init__方法

你可能感兴趣的:(Python,python,开发语言)