一、面向对象的概念
面向对象oop(onject oriented programming),与之对应的还有面向过程,像C语言就是面向过程的
理解过程和函数?
过程:是早期的一个编程概念,过程类似于函数,只能执行,但是没有返回值
函数:不仅能执行,还可以返回结果(return)
二、深刻理解什么时面向对象和面向过程
1、面向过程:—-侧重于怎么做?
- 把完成某个需求的所有步骤从头到尾逐步实现
- 根据开发要求,将某些功能独立的代码封装成一个又一个函数
- 最后完成的代码,就会死顺序的调用不同的函数
特点:
- 注重步骤与过程,不注重职责分工
- 如果需求复杂,代码会变得很复杂
- 开发复杂项目,没有固定的套路,开发难度很大
2、面向对象:—侧重于谁来做?
相比较函数,面向对象是更大的封装,根据职责在一个对象中封装多个方法
- 在完成某个需求之前,首先确定职责—要做的事情(方法)
- 根据职责确定不同的对象,在对象内部封装不同的方法(或是多个方法)
- 最后完成代码,就是顺序的让不同对象调用不同的方法
特点:
- 注重对象和职责,不同的对象承担不同的职责
- 更加适合复杂的需求变化,是专门应对复杂项目的开发提供的固定套路
- 需要在面向过程的基础上,再学习一些面向对象的语法
面向对象编程有:Python 、JAVA 、C++
三、类与对象
类:是对一群具有相同特征或行为的事物的一个统称,不能直接使用(比如:飞机制造图纸不能飞上天)
特征:属性
行为:方法
对象:由类创建出来的一个具体的存在,可以直接使用(用图纸制造出来的飞机可以飞上天)
在程序开发中:应该先有类 再有对象
类的设计
1.类名 这类事物的名字,满足大驼峰命名法
大驼峰命名法
——–>每一个单词的首字母大写
——–>单词与单词只见没有下划线
2.属性 这个类创建出的对象有什么样的特征
3.方法 这个类创建出的对象有什么样的行为
四、面向对象的基础语法
定义简单的类:
定义只包含方法的类:
class 类名:
def 方法1(self,参数列表):
pass
def 方法2(self,参数列表):
pass
当一个类定义完成之后,要使用这个类来创建对象,语法格式如下:
对象变量 = 类名()
需求:小猫爱吃鱼,小猫要喝水
class Cat():
def eat(self):
print '小猫爱吃鱼'
def drink(self):
print '小猫要喝水'
tom = Cat()
tom.eat()
tom.drink()
不同打印格式:
class Cat():
def eat(self):
print 'The cat likes to eat fish!'
def drink(self):
print 'The cat likes to drink'
tom = Cat()
tom.eat()
tom.drink()
print tom
addr = id(tom)
# %x打印格式为十六进制
print '%x' % addr
# %d打印格式为十进制
print '%d' % addr
哪一个对象调用的方法,self就是哪一个对象的引用
class Cat():
# 哪一个对象调用的方法,self就是哪个对象的引用
def eat(self):
print '%s likes to eat fish!' % self.name
def drink(self):
print 'The cat likes to drink'
tom = Cat()
tom.name = 'tom'
tom.eat()
tom.drink()
print tom
# 再创建一个对象
lazy_cat = Cat()
lazy_cat.name = 'lazy_cat'
lazy_cat.eat()
lazy_cat.drink()
print lazy_cat
五、内置方法
1. 初始化方法__init__
【1】基础概念
我们现在已经知道了使用 类名() 就可以创建一个对象
当使用类名()创建对象时,python的解释器会自动执行以下操作:
1.为对象在内存中分配空间–创建对象
2.调用初始化方法为对象的属性设置初始值–初始化方法(__init__)
这个初始化方法就是__init__
方法,__init__
是对象的内置方法
__init__
方法是专门用来定义一个类具有哪些属性的方法
【2】使用 类名() 创建对象的时候,会自动调用初始化方法__init__
class Cat():
def __init__(self,new_name):
# self.属性名 = 属性的初始值
self.name = new_name
# 在类中任何方法都可以使用self.name
def eat(self):
print '%s likes fish' % self.name
tom = Cat('tom')
print tom.name
tom.eat()
lazy_cat = Cat('lazy_cat')
print lazy_cat.name
lazy_cat.eat()
注:不推荐在类的外部给对象增加属性。如果在运行时,没有找到属性,程序会报错
2.__del__
方法
【1】基础概念
在python中,当使用类名()创建对象时,为对象分配完空间后,自动调用__init__
方法
当一个对象被从内存中销毁后,会自动调用__del__
方法
【2】示例
class Cat():
def __init__(self,new_name):
self.name = new_name
print '%s is come ' % self.name
def __del__(self):
print '%s is gone' % self.name
tom = Cat('tom')
print tom.name
print '-' * 50
3.__str__
方法
【1】基础概念
在python中,使用python输出对象变量,
默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象,
以及在内存中的地址(十六进制表示)
如果在开发中,希望使用print输出对象变量时,
能够打印自定义的内容,就可以利用str这个内置方法了
【2】示例
class Cat():
def __init__(self, new_name):
self.name = new_name
def __str__(self):
# 必须返回一个字符串
return 'I am %s' % self.name
tom = Cat('tom')
print tom
当注释掉__str__
方法后,则返回类名和内存地址