类和对象
面向过程——怎么做?
 (1)把完成某一需求的所有步骤、从头到尾,逐步实现
 (2)根据开发需求,将某些功能独立的代码块封装成一个又一个的函数
 (3)最后完成的代码,就是顺序地调用不同的函数
 面向对象——谁来做?
 (1)在完成某一需求之前,首先确定职责——要做的事情(方法)
 (2)根据职责确定不同的对象,在各个对象内封装不同的方法(赋予每个对象不一样的能力,从而承担不一样的职责)
 (3)最后完成代码,就是顺序地让不同的对象调用不同的方法
 总结:相比较函数封装,对象是更大的封装,不仅将功能独立的代码块封装成一个方法,更将多个方法封装到一个对象中
 0-1、类(一张飞机的设计图纸)
 是对具有相同特征和行为的一类事物的统称,是抽象的,不能直接使用的;可以看作一个模板,是负责创建对象的
 特征:属性
 行为:方法
 0-2、对象(根据设计图纸,制造的一辆真实的飞机)
 是由类创建出来的一个具体存在,是可以直接使用的;
 由哪一个类创建出来的对象,就具有哪一个类的属性和方法
 0-3、类和对象的关系
 程序开发中,先有类,再有对象
 类只有一个,而对象可以有多个;
 类中定义了什么属性和方法,对象中就有什么属性和方法;
 不同的对象之间属性的具体值(形参)可以是各不相同的(比如由同一张图纸创建出来的三辆飞机颜色可能各不相同)
 0-4、类的设计
 先确定需要哪些类;一个类需要包含以下三个元素:
 (1)类名:这类事物的名字
 大驼峰命名法:每一个单词的首字母大写,单词与单词之间无下划线
 (2)属性:这类事物具有什么样的特征(常用名词命名)
 对象具有的特征(名词),通常可以定义为属性
 (3)方法:这类事物具有什么样的行为(常用动词命名)
 对象具有的动作(动词),通常可以定义为方法
 例子:
 
面向对象的基础语法
1-1、 dir()内置函数
 在python中,变量、数据和函数都是对象,调到用dir()函数可以查看对象内的所有属性和方法
 如:dir(demo) 会返回demo这个类的所有属性和方法
 其中:方法名 格式的方法是python内置的方法/属性
 
 1-2、定义简单的类*
 在一个类中封装多个方法,这样通过这个类创建的对象就可以直接调用这些方法
 (1)定义只包含方法的类
class 类名:def 方法名一(self,参数列表):passdef 方法名二(self, 参数列表):pass
 
(2)创建对象
对象变量 = 类名()
 
(3)第一个面向对象的程序
 例子:小猫爱喝水,小猫爱吃鱼
 分析:定义一个猫类;定义两个方法(eat、drink);按照需求,不需要定义属性
class Cat:def eat(self):print("小猫爱吃鱼")def drink(self):print("小猫爱喝水")
# 创建猫对象(等号右边负责创建对象,等号左边负责对这个对象进行引用)
tom = Cat()
# 调用猫方法
tom.eat()
tom.drink()
# 返回tom对象是由哪一个类创建的以及这个对象在内存中的地址
print(tom)
# 返回tom对象的地址(16进制)
addr = id(tom)
# 转换为10进制
print("%d" % addr)
# 转化为16进制
print("%x" % addr)
 

 (4)案例改造-给对象增加属性
 方法:在类外部代码上直接通过 :对象名.新增属性名 = 属性值
 
这种方法简单,但不推荐使用,因为对象的属性和方法应当封装在类的内部,而不应该在类的外部来添加。
 
 并且lazy_cat的并没有增加属性name,说明各个对象之间是相互独立的,对一个对象进行增加属性的操作并不会影响其他的对象。
1-3、self是什么
 ——在类封装的内部,self就表示当前调用方法/属性的对象自己;
 self就是创建的对象本身,哪一个对象调用这个方法,self就是哪一个对象的引用
 
 1-4、 在类的外部给对象增加属性的问题
 
 会出现找不对该属性的问题,因此对象需要包含哪些属性,应该封装在类的内部!
初始化方法
2-1 、什么是初始化方法
 当使用类名创建对象时,会自动执行以下操作:
 (1)创建对象——为对象在内存中分配空间
 (2)初始化方法(init)——为对象的属性设置初始值
 init:内置的方法,专门用来定义一个类具有哪些属性的方法
 
 2-2 、在初始化方法内部定义属性
 (1)在__init__方法内部使用 self.属性名 = 属性的初始值 就可以定义属性
 (2)定义属性之后,使用该类创建的对象,都会拥有该属性
 
 2-3 、__str__方法
 在用print输出对象变量时,能够打印自定义的内容,该方法必须返回一个字符串:
 
 2- 4、 案例
 
 总结:在对象的方法内部,是可以直接访问对象的属性的;
 同一个类创建的各个对象之间是互不干扰的;