Python学习笔记(13)-面向对象编程-类和对象

面向对象编程

在学习面向对象编程之前我们一直使用面向过程进行编程,也就是说把完成一件事的所有过程都要考虑周全,举个例子,我们要做一道炒鸡蛋的菜,使用面向过程编程要考虑家里有没有鸡蛋、油,如果没有就去买,然后开火放油放鸡蛋还要考虑火的大小和鸡蛋的生熟程度等等,每一步骤都要考虑清楚,而使用面向对象编程我们只需找到一个会做炒鸡蛋的人,把事情交给他去做,我们只负责吃就可以了,不用关心他是怎么做的

面向对象编程要使用对象,那么对象是怎么创建的呢?,答案是由类创建的,那么什么又是类呢?

我们来列举下生活当中的类如:汽车图纸、玩具模型等,它们有一个共同特点,即通过它们可以制造出许多真实的汽车和许多真实的玩具

总而言之:类就是创建对象的模板

类由三部分组成:

1、名称:给类起的名字,定义这是一个汽车类还是一个动物类等

2、属性:一组特征数据,如汽车类的属性都有颜色、外观、速度等

3、方法:这个类都会有哪些功能,如汽车类的方法可以移动、前进、后退等

定义类:

class 类名:

  属性

  方法

注意:

1、class 类名:也可以写成class 类名(object):,没什么区别,第一种是经典类,第二种是新式类

2、类名通常使用大驼峰方式命名

3、方法样式几乎与前面学的函数相同,不同点为方法的形参中第一项必须写上self且不需要给self传参数

如定义一个车类:

class Car:

  属性

  def move(self):

    print("车在移动...")

  def alarm(self):

    print("车在告警...")

说明:属性如何定义会在后面提到  

对象

由类创建出的实体就叫做对象

创建形式为:对象名 = 类()

如:

class Car:

  def move(self):

    print("车在移动...")

Aodi = Car() 

Aodi.move()

运行结果:

车在移动...

说明:

1、通过Aodi = Car()则创建了一辆Aodi(奥迪) 车

2、类(Car)创建出的对象(Aodi)可以使用类中的方法(move,因为定义在类中,所以这里不叫函数叫方法)

self用途与含义

下面通过车类创建多个对象(一个类可以创建无数多个同类对象),如:

class Car:

  def move(self):
    print("%s车在移动..."%Aodi.name)
Aodi = Car()
Aodi.name = "奥迪"
Aodi.move()

Baoma = Car()
Baoma.name = "宝马"
Baoma.move()

运行结果:

奥迪车在移动...

奥迪车在移动...

奥迪车和宝马车均可以使用类中的move方法,但是格式化输出时%号后面写谁的名字属性都达不到想要的效果,写奥迪的名字都打印奥迪车在移动,写宝马的名字都打印宝马车在移动,这里我们想要达到的效果为奥迪车调用move方法时打印奥迪车信息,宝马车调用move方法时打印宝马车信息,这是我们就使用self来解决,self含义可以理解为自身,哪一个对象调用方法self就代表哪一个对象,所以更改代码为print("%s车在移动..."%self.name),这时运行结果为:奥迪车在移动...,宝马车在移动

说明:

Aodi.name = "奥迪",意为添加Aodi对象的名字属性(属性通常不在这里创建,为了介绍self含义临时创建在这里)

__init__方法

如果类中定义了__init__方法,则表示在创建对象时系统会默认调用此方法,也叫初始化方法,如:

class Car:

  def __init__(self,new_name):

    self.name = new_name

  def move(self):

    print("%s车在移动..."%self.name)
Aodi = Car("奥迪")
Aodi.move()

Baoma = Car("宝马")
Baoma.move()

运行结果:

奥迪车在移动...

宝马车在移动...

说明:

1、类在创建对象时就已经有默认的属性(如创建一辆汽车时就已经注定这个车子是什么品牌,有几个轮子等),所以类的属性一般定义在__init__方法中

2、__init__方法在创建对象时候被调用,所以属性通过(对象 = Car(属性))传入方法中

原文地址:https://www.cnblogs.com/lidongaistudy/p/9566549.html