面向对象

面向过程和面向对象的区别:

面向过程:根据业务逻辑从上到下写代码
面向过程编程最易被初学者接受,其往往用一长段代码来实现指定功能,开发过程的思路是将数据与函数按照执行的逻辑顺序组织在一起,数据与函数分开考虑。
面向对象(object-oriented ;简称: OO)
至今还没有统一的概念 我这里把它定义为: 按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。
面向对象编程(Object Oriented Programming-OOP) 是一种解决软件复用的设计和编程方法。
这种方法把软件系统中相近相似的操作逻辑和操作应用数据、状态,以类的型式描述出来,以对象实例的形式在软件系统中复用,以达到提高软件开发效率的作用。

类和对象

类的含义

人以类聚 物以群分。具有相似内部状态和运动规律的实体的集合(或统称为抽象)。 具有相同属性和行为事物的统称。
对象的含义:
某一个具体事物的存在 ,在现实世界中可以是看得见摸得着的。可以是直接使用的

类和对象的关系:一个变形金刚模型就是一个类,而下面的各种的擎天柱、大黄蜂就是一个一个的对象

类的构成:

类(Class) 由3个部分构成
类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法 (行为)

定义类和对象

创建对象:

当创建一个对象时,就是用一个模子,来制造一个实物 。
类是创建实例对象的模板,可以创建很多个实例对象。

创建的格式为:

对象名 = 类名()

调用对象的方法:

对象.方法名()

self和init方法

从创建多个对象引入self:
某个对象调用其方法时,Python解释器会把这个对象作为第一个参数传递给self.
self通俗的话讲,就是谁调用这个方法就是谁。
就像生活中谁拿起了一个自我介绍的卡片,自我介绍的时候就是谁。

class Cat(object):
    def __init__(self,name,age):
        print("调用__init__方法")
        self.name = name
        self.age = age
    def eat(self):
        print("%s在吃"%self.name)
    def drink(self):
        print("%s在喝水"%self.name)
    def printinfo(self):
        print("%s的年龄是%d"%(self.name,self.age))
lanmao = Cat("蓝猫",24)
lanmao.printinfo()
lanmao.eat()
lanmao.drink()

hongmao = Cat("虹猫",20)
hongmao.printinfo()

魔法方法

"魔法"方法id()和__str__()
打印id()
如果把tom使用print进行输出的话,会看到什么信息?
定义__str__()方法
当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

class Person(object):
    def __init__(self,name,age):
        print("调用了__init__方法")
        self.name = name
        self.age = age
    def printinfo(self):
        print("%s的年龄是%d"%(self.name,self.age))
    def __str__(self):
        return "%s的年龄是%d"%(self.name,self.age)
andy = Person("安迪",25)
andy.printinfo()
print(andy)